Dan*_*nez 1 authentication jwt asp.net-web-api owin azure-active-directory
我有一个WebApi应用程序正在使用Windows Azure Active Directory承载身份验证来验证用户.用户通过身份验证后,我想查询Azure的Graph Api以获取有关该用户的更多信息.
我有一个有效的解决方案,但似乎非常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;
Run Code Online (Sandbox Code Playgroud)
必须有一个更好的方法,但我已经尝试过AcquireToken许多不同的重载,这是我能让它工作的唯一方法.我尝试了AcquireTokenSilent,它在我的客户端应用程序中工作,因为TokenCache中有一个令牌,但是当我尝试使用WebApi时,似乎没有任何地方可以实现TokenCache.
小智 6
这确实有点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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1971 次 |
| 最近记录: |