問題

你好我正在研究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