如何使用Swagger在JWT令牌中包含组声明?

时间:2019-09-24 06:40:22

标签: jwt azure-active-directory authorization claims

Net核心应用程序。我已经使用OAuth v2方法实现了身份验证。现在,我试图在我的JWT令牌中包含组声明。我在清单中做了以下更改。通过招摇通过身份验证时,我无法获得组。

"groupMembershipClaims": "All",
"optionalClaims": {
    "accessToken": [{
        "name": "groups"
    }]
}

云中的组很少,而Windows服务器AD中的组则很少。进行上述更改后,我在索赔中看不到分组详细信息。下面是我的代码。

                services.AddAuthentication(o =>
               {
                   o.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;

               })
               .AddJwtBearer(o =>
               {
                   o.Authority = azureActiveDirectoryOptions.Authority;

                   o.TokenValidationParameters = new TokenValidationParameters
                   {

                       ValidAudiences = new List<string>
                       {
                          azureActiveDirectoryOptions.AppIdUri,
                          azureActiveDirectoryOptions.ClientId
                       },
                   };
               });
services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" });

            c.AddSecurityDefinition("oauth2", new OAuth2Scheme
            {
                Type = "oauth2",
                Flow = "implicit",
                AuthorizationUrl = swaggerUIOptions.AuthorizationUrl,
                TokenUrl = swaggerUIOptions.TokenUrl,
                Scopes = new Dictionary<string, string>
                {
                    {"Read", "id/.default" }
                }
            });
            c.AddSecurityRequirement(new Dictionary<string, IEnumerable<string>>
            {
                    { "oauth2", new[] { "readAccess", "writeAccess" } }
            });
        });

然后是Configure方法。

app.UseSwaggerUI(c =>
            {

                c.OAuthClientId(swaggerUIOptions.ClientId);
                c.OAuthClientSecret(swaggerUIOptions.ClientSecret);
                c.OAuthRealm(azureActiveDirectoryOptions.ClientId);
                c.OAuthAppName("Swagger");
                c.OAuthAdditionalQueryStringParams(new { resource = azureActiveDirectoryOptions.ClientId });
                c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
            });

我可以使用邮递员来获取组的详细信息,但不能通过我敏捷的应用程序身份验证来获取。 有人可以帮助我弄清楚问题是什么以及为什么我看不到组详细信息吗?我是否需要在Azure Portal中进行任何配置?任何帮助,将不胜感激。谢谢

0 个答案:

没有答案