1

我有一個WebApi應用程序使用Windows Azure Active Directory載體驗證來驗證用戶身份。在用戶通過身份驗證後,我想查詢Azure的Graph Api以獲取有關該用戶的更多信息。使用用於AzureBearerAuthentication的JWT獲取Access令牌

我有一個解決方案,但似乎很hacky。我讀了Authorization頭並剝離出靠背部分,然後我用AquireToken來獲得新的令牌:

var authHeader = HttpContext.Current.Request.Headers["Authorization"]; 
var tokenMatch = Regex.Match(authHeader, @"(?<=^\s*bearer\s+).+$", RegexOptions.IgnoreCase); 

var result = authInfo.AuthContext.AcquireToken(resourceId, authInfo.Credential, 
    new UserAssertion(tokenMatch.Value)); 

return result.AccessToken; 

必須有一個更好的辦法,但我試過AcquireToken許多不同的重載,這是唯一的辦法,我可以得到它的工作。我嘗試了AcquireTokenSilent,它適用於我的客戶端應用程序,因爲TokenCache中有一個令牌,但是當我嘗試使用WebApi時,似乎沒有任何可實施TokenCache的地方。

回答

5

這確實有點不好意思:-)有關如何通過ClaimsPrincipal檢索傳入令牌的方法,請參閱https://github.com/AzureADSamples/WebAPI-OnBehalfOf-DotNet。它歸結爲在選項傳遞TokenValidationParameters = new TokenValidationParameters{ SaveSigninToken = true }並通過

var bootstrapContext = ClaimsPrincipal.Current.Identities.First().BootstrapContext as System.IdentityModel.Tokens.BootstrapContext; 
+0

感謝您的控制器或過濾器代碼中檢索,這是我錯過了什麼。 http://stackoverflow.com/questions/14083885/bootstrapcontext-is-null-on-claimsidentity/33827070#33827070 – Jaanus