写在前面
前阵子,因为要和其他公司合作搞一个项目,以 Rest 接口的方式提供一部分我们的数据,所以做了一个 webapi 的项目,授权中心接入的是统一的地址。
在开发过程中,接口文档使用的是 DotnetCore 默认的 Swagger,为了测试方便,便将 Swagger 也接入了 Id4 授权中心。
服务端(授权中心)配置
这一部分由于不是我们做的,所以就不写太多了,引用的也是 Id4 的官方 SDK,配置也比较容易,官方文档的地址是:https://identityserver4.readthedocs.io/en/latest/,也有中文文档,但我感觉中文的版本比较老,更新也不勤,还不如借助翻译软件,硬看英文原文。
最后配置好后,可以看到这个界面,就是配置成功了,其余的就是在 Id4 的框架约定下,基于业务的调整了
Swagger 配置
因为 DotnetCore 框架的服务大都是可配置的,这里将 Swagger 的默认配置,单独提取到配置文件里。
通过引用 Microsoft.Extensions.Configuration 和 Microsoft.Extensions.DependencyInjection 两个命名空间,可以单独提取出有关 Swagger 的配置。然后,可以配置 IdentityServer 相关的服务。
public static void ConfigureSwagger(this IServiceCollection services, IConfiguration configuration)
{
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo
{
Title = "CIP.API",
Version = "V1",
Description = "客户接口中心"
});
c.OperationFilter<AddResponseHeadersFilter>();
c.OperationFilter<AppendAuthorizeToSummaryOperationFilter>();
c.OperationFilter<SecurityRequirementsOperationFilter>();
//接入identityserver4
c.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme
{
Type = SecuritySchemeType.OAuth2,
Flows = new OpenApiOAuthFlows
{
Implicit = new OpenApiOAuthFlow
{
AuthorizationUrl = new Uri($"{configuration.GetSection("IdentityServer4")["authUrls"]}/connect/authorize"),
Scopes = new Dictionary<string, string> {
{
//"IdentityServer.API","IdentityServer4 API "
"IdentityServer.API","cipapi"
}
}
}
}
});
c.IncludeXmlComments(XmlAPIFilePath, true);
});
}
复制代码
然后,在 StartUp.cs 文件里,注入配置好的服务
public IConfiguration Configuration { get; }
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
//注入Swagger配置
services.ConfigureSwagger(Configuration);
//配置其他服务...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILogger<Startup> logger)
{
app.UseAuthentication();
app.UseAuthorization();
}
复制代码
如此,在访问接口文档,就可以看到逾期的结果了。
在非授权的情况下,访问接口会直接返回 401
而授权之后,就可以正常访问了
其实 IdentityServer4 在 dotnet 的项目里,使用的还是很多的,也很好用,基本配置没有问题的话,跑通整个的授权流程还是非常方便的。
评论