[英]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的評論,他/她得到它通過改變工作oauth2AllowImplicitFlow
從false
到true
。
即使將oauth2AllowImplicitFlow
和oauth2AllowIdTokenImplicitFlow
設置為 true,我也遇到了問題。 我的一個回復 URL 中有一個通配符。 刪除通配符后,問題就解決了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.