回家的路上照顾好自己哟~
大家好,老张已经顺利到家啦,闲的无事写两篇文章冒个泡吧,其实写的内容都是群友提出来的问题,简单的我会在群里直接提供思路,麻烦的我就写个文章说明一下吧,也是自己的一个记录作用,今天简单说一下,如何在资源服务器中,通过Swagger来调试授权认证中心。因为之前我们都是使用的JWT Bearer认证嘛,这次统一都换成了Ids4了,所以这里也要做一下相应的处理。
1
哪几个项目已经完成了迁移
去年6月的时候,Idp项目正式开源,那个时候我简单的学习了如何使用ids4,感觉很简单,然后豪言壮志的说,会把所有的项目都迁移过去,没想到实战起来,并没有那么简单的,导致一直搁置到了现在,还好在春节之前全部搞定了,上篇文章说的是ChristDDD项目,剩下的最后一个Nuxt项目也迁移了,所以总结来说,以下所有项目都已经完成了迁移到Ids4的工作:
相信只要你看过我的文章,应该都能知道这几个项目对应的含义,自己可以动手试一试,这一套也是我的心血了,无论是从vue,还是到netcore,无论是从api,还是到MVC,无论是从SPA静态渲染,还是到SSR渲染,终于告一段落,如果你所在的公司或者企业要使用,或者基于我的这一套六个项目整改的话,可以找我售后一下,就比如这位老铁:
(考虑隐私,暂不提供知情人信息)
既然说到了 api 项目,那就是剩下最后一个问题了,如何在Swagger中联调,因为之前我都是直接打开了vue项目,又打开了BlogCore和Idp项目,麻烦!接下来咱们就简单的说说,如何配置Swagger,接入IdentityServer4。
2
Swagger中接入Ids4配置
注意,这是NetCore3.1的写法:
代码语言:javascript复制 // Jwt Bearer 认证,必须是 oauth2,这里注释掉
//c.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme
//{
// Description = "JWT授权(数据将在请求头中进行传输) 直接在下框中输入Bearer {token}(注意两者之间是一个空格)"",
// Name = "Authorization",//jwt默认的参数名称
// In = ParameterLocation.Header,//jwt默认存放Authorization信息的位置(请求头中)
// Type = SecuritySchemeType.ApiKey
//});
// 接入identityserver4
c.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme
{
Type = SecuritySchemeType.OAuth2,
Flows = new OpenApiOAuthFlows
{
// 因为是 api 项目,那肯定是前后端分离的,所以用的是Implicit模式
Implicit = new OpenApiOAuthFlow
{
// 这里配置 identityServer 项目的域名
AuthorizationUrl = new Uri($"https:ids.neters.club/connect/authorize"),
// 这里配置是 scope 作用域,
// 只需要填写 api资源 的id即可,
// 不需要把 身份资源 的内容写上,比如openid
Scopes = new Dictionary<string, string> {
{
"blog.core.api","ApiResource id"
}
}
}
}
});
这里我们配置好以后,运行项目,就可以看到效果了:
可以看到,采用的是OAuth2.0协议,implicit授权模式,
client_id,是我们的客户端id,要和ids4配置的匹配,下文会说到。
地址是ids.neters.club,Scopes 是我们定义的 blog.core.api,
这两个都要和认证服务匹配,具体是哪里呢,就是我们开启认证服务的地方:
我这里把授权地址URL,给写到了配置文件里,因为有时候我们的ids4项目可能会变化,
其实这里我们的apiName也可以配置到appsettings.json文件夹中。
注意,scope不需要填写其他的,不然会报错,只需要把 client_id 写上即可:
接下来,我们就需要配置Ids4项目了。
3
Ids4项目配置回调地址
这里其实就很简单的,如果我们不对回调地址做相应的增加的话,会提示无效的错误:
这里就很简单了:
代码语言:javascript复制// blog.admin 前端vue项目
new Client {
ClientId = "blogadminjs",
ClientName = "Blog.Admin JavaScript Client",
AllowedGrantTypes = GrantTypes.Implicit,
AllowAccessTokensViaBrowser = true,
// 回调地址uri集合,可以写多个
RedirectUris =
{
"http://vueadmin.neters.club/callback",
"http://apk.neters.club/oauth2-redirect.html",
"http://localhost:8081/oauth2-redirect.html",
},
PostLogoutRedirectUris = { "http://vueadmin.neters.club" },
AllowedCorsOrigins = { "http://vueadmin.neters.club" },
AllowedScopes = {
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
"roles",
// 上边的这三个 scope ,可以不用配置到swagger中
"blog.core.api"// 这个资源api的name,要一致
}
},
这里我要强调一点,不是说每次我们都要修改这个Config.cs这个类,这是初始化的,我一般都是直接修改的数据表数据就行,常见的三个配置表就是:
到了这里,我们一般就是修改完成了,可以测试一下,来个动图:
是不是很简单!不用再打开前端vue来测试了,是不是很方便。
IdentityServer4 项目还是挺好的,无论是企业里,还是个人使用,都是比较好的方案,除非你所在公司有一套自己的项目。
打完收工,下一篇,我们就简单来说说,如何做单点登录了。