您好,我正在开发 Azure AD 和 .net core 应用程序。我正在尝试实现身份验证和授权。我使用 .net core 应用程序配置了 swagger。我可以使用 swagger 进行身份验证。目前我加入了大约 100 个团体。我正在使用隐式授权流程进行 swagger 身份验证。根据我浏览过的文档,
如果组数超过 5 个,则 JWT token 将包含 "hasgroups": "true"和 - 就我而言,我可以在 JWT token 中看到 "hasgroups": "true"。
如果使用 Azure AD Connect 将组同步到 Azure AD,则可以显示组名称 - 在我的例子中,使用 Azure AD Connect 同步到 Azure AD,但我看不到 ID 或名称。
我有超过 100 个组,因此由于 url 限制,当我们使用隐式流时无法获取组。
另外,如果我只有后端 API,在这种情况下建议使用哪种授权流程? API 对调用应用程序一无所知。
在隐式流程中,将仅调用 azure ad 来获取访问 token ,而在授权授予流程中,将有两个调用,一个用于获取授权代码,然后使用授权代码获取访问 token 。这是我的理解。我不确定我是否理解正确。 有人可以帮助我理解以上两点吗?我对以上两点感到有些困惑。在这方面的任何帮助将不胜感激。谢谢
下面是我的 swagger 实现。
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", "guid/.default" }
}
});
c.AddSecurityRequirement(new Dictionary<string, IEnumerable<string>>
{
{ "oauth2", new[] { "readAccess", "writeAccess" } }
});
});
在配置中,
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");
});
最佳答案
如果用户有太多组,它们将不会出现在访问 token 中。 由于 token 是在 URL 中返回的,因此隐式流的限制较小。
在这些情况下,您的后端需要通过 Microsoft Graph API 检查组成员身份。
关于azure - 在隐式流的情况下是否可以在 JWT token 中包含组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58214060/