【实战 Ids4】║ 在Swagger中调试认证授权中心

2022-04-11 11:37:06 浏览数 (1)

回家的路上照顾好自己哟~

大家好,老张已经顺利到家啦,闲的无事写两篇文章冒个泡吧,其实写的内容都是群友提出来的问题,简单的我会在群里直接提供思路,麻烦的我就写个文章说明一下吧,也是自己的一个记录作用,今天简单说一下,如何在资源服务器中,通过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 项目还是挺好的,无论是企业里,还是个人使用,都是比较好的方案,除非你所在公司有一套自己的项目。

打完收工,下一篇,我们就简单来说说,如何做单点登录了。

0 人点赞