【问题标题】:Acquiring an Access token by using JWT used for AzureBearerAuthentication使用用于 AzureBearerAuthentication 的 JWT 获取访问令牌
【发布时间】:2015-08-18 21:42:26
【问题描述】:

我有一个 WebApi 应用程序,它使用 Windows Azure Active Directory 承载身份验证对用户进行身份验证。用户通过身份验证后,我想查询 Azure 的 Graph Api 以获取有关用户的更多信息。

我有一个可行的解决方案,但看起来很老套。我阅读了 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。

【问题讨论】:

    标签: authentication asp.net-web-api owin jwt azure-active-directory


    【解决方案1】:

    这确实有点 hacky :-) 请参阅 https://github.com/AzureADSamples/WebAPI-OnBehalfOf-DotNet 了解可以通过 ClaimsPrincipal 检索传入令牌的方法。归结为在选项中传递 TokenValidationParameters = new TokenValidationParameters{ SaveSigninToken = true } 并通过

    从您的控制器或过滤器代码中检索
    var bootstrapContext = ClaimsPrincipal.Current.Identities.First().BootstrapContext as System.IdentityModel.Tokens.BootstrapContext; 
    

    【讨论】:

    猜你喜欢
    • 2021-10-03
    • 1970-01-01
    • 2018-04-26
    • 2015-08-20
    • 2020-09-28
    • 2019-12-18
    • 1970-01-01
    • 2020-08-28
    • 2018-01-13
    相关资源
    最近更新 更多