簡體   English   中英

Azure AD 中的 jwt-bearer 代表授權問題

[英]Issue with jwt-bearer on-behalf-of grant in Azure AD

所以我有一個 Angular 應用程序,它使用 adal-angular 庫通過 ASP.NET Core 2.0 Web API 進行身份驗證。 然后,API 使用代表流使用用戶令牌對另一個 API 進行身份驗證,例如這篇 MS 文章https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-protocols -oauth-on-behalf-of

我遇到的問題是這在 DEV 環境中工作正常,但我現在已經部署了一個具有單獨應用程序注冊的 TST 環境,當我嘗試使用代表請求令牌時收到以下異常

AADSTS240002:輸入 id_token 不能用作“urn:ietf:params:oauth:grant-type:jwt-bearer”授權。

我用來請求令牌的代碼

public async Task<string> AcquireTokenAsync(string resource)
    {
        try
        {
            string accessToken = await _httpContextAccessor.HttpContext.GetTokenAsync(AuthenticationConstants.AccessToken);

            var credentials = new ClientCredential(_azureOptions.ClientId, _azureOptions.ClientSecret);
            var authContext = new AuthenticationContext($"{_azureOptions.Instance}{_azureOptions.TenantId}")
            {
                ExtendedLifeTimeEnabled = true
            };

            // On-behalf-of auth token request call
            var authResult = await authContext.AcquireTokenAsync(
                resource,
                credentials,
                new UserAssertion(accessToken));

            return authResult.AccessToken;
        }
        catch (AdalServiceException asex)
        {
            _logger.LogError(asex, $"Instance: {_azureOptions.Instance} Tenant: {_azureOptions.TenantId} ClientId: {_azureOptions.ClientId}");
            throw;
        }
        catch (System.Exception ex)
        {
            _logger.LogError(ex, ex.Message);
            throw;
        }
    }

我用過 Fiddler提琴手 看起來所有正確的參數都被傳遞了。

任何幫助將不勝感激。 我已經在第二個 API 上設置了 knownClientApplications,並且我已經向第二個 API 授予了對 Angular 后端 API 的權限。

對我來說,我通過將以下兩個都更改為true使其工作:oauth2AllowImplicitFlow oauth2AllowIdTokenImplicitFlow

請參閱此處了解更多信息。

根據您的問題和錯誤,應該是由於您的 angular app is not a Native(public) app 引起的

要將此 OBO 流與此授予類型一起使用,您的客戶端必須是公共客戶端而不是憑證客戶端。

如果您想將您的客戶端注冊為 WebApp/API,您可以參考這個實現

在此處輸入圖片說明

希望這可以幫助!


更新

據OP的評論,他/她得到它通過改變工作oauth2AllowImplicitFlowfalsetrue

即使將oauth2AllowImplicitFlowoauth2AllowIdTokenImplicitFlow設置為 true,我也遇到了問題。 我的一個回復 URL 中有一個通配符。 刪除通配符后,問題就解決了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM