问题

你好我正在研究Azure AD和.net核心应用程序.我正在尝试实现身份验证和授权.我已经使用我的.net核心应用程序配置了swagger.我能够使用swagger进行身份验证.目前我有大约100个组,我是其中的一部分.我正在使用隐式赠款流来进行swagger身份验证.根据文档,我已经经经历了,

如果有超过5个组,那么JWT令牌将包含“hasgroups”:“true”和 – 在我的情况下,我能够在JWT令牌中看到“hasgroups”:“true”.

如果组使用Azure AD Connect与Azure AD同步,则可以显示组名 – 在我的情况下,使用Azure AD Connect与Azure AD同步,但我无法看到id或名称.

我有超过100个组,因此由于url限制,当我们使用隐式流时无法获得组.

在隐式流中,只会调用azure ad来获取Access令牌,在授权授权流中,将有两个调用一个来获取授权代码,然后使用授权代码来获取访问令牌.这是我的理解.我不确定如果我正确理解这一点. 有人可以帮助我理解上述两点吗?我对上述两点感到困惑.在这方面任何帮助将不胜感激.谢谢

下面是我的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" } }
                });
            });
 

在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");
            });
 

  最佳答案

如果用户有太多的组,他们就不会在访问令牌中。 对于隐式流,限制较小,因为令牌在 URL 中返回。

在这些情况下,您的后端需要通过Microsoft Graph API检查组成员。

  相同标签的其他问题

azureoauth-2.0azure-active-directoryswagger