回家的路上照顾好自己哟~
大家好,老张已经顺利到家啦,闲的无事写两篇文章冒个泡吧,其实写的内容都是群友提出来的问题,简单的我会在群里直接提供思路,麻烦的我就写个文章说明一下吧,也是自己的一个记录作用,今天简单说一下,如何在资源服务器中,通过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的写法:
// Jwt Bearer 认证,必须是 oauth2,这里注释掉//c.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme//{// Description = "JWT授权(数据将在请求头中进行传输) 直接在下框中输入Bearer {token}(注意两者之间是一个空格)\"",// Name = "Authorization",//jwt默认的参数名称// In = ParameterLocation.Header,//jwt默认存放Authorization信息的位置(请求头中)// Type = SecuritySchemeType.ApiKey//});// 接入identityserver4c.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项目配置回调地址
这里其实就很简单的,如果我们不对回调地址做相应的增加的话,会提示无效的错误:
这里就很简单了:
// 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 项目还是挺好的,无论是企业里,还是个人使用,都是比较好的方案,除非你所在公司有一套自己的项目。
打完收工,下一篇,我们就简单来说说,如何做单点登录了。