我有一个台式机应用程序,我在其中通过AuthenticationContext.AcquireTokenAsync
通过Azure验证用户。
使用此方法的结果,我可以获得访问令牌,并将其发送到WCF,然后在WCF中使用JwtSecurityToken
/ ConfigurationManager< OpenIdConnectConfiguration >
来验证令牌。
我现在已经通过使用app.UseOpenIdConnectAuthentication
配置Web应用程序中的Azure登录。因此,在我的Web应用程序中,我没有明确调用返回令牌的方法。而是我将其插入asp.net的流程中。
但是现在我想用一种方法来获取令牌,然后将其发送给我以进行验证,就像我在桌面应用程序中所做的一样。我找不到ConfigurationManager
接受的任何令牌。我查看了常规HttpContext
和Owincontext
,但没有找到有用的信息。 accesstoken
是否存储在我可以获取的任何地方?还是我必须再次请求获取accesstoken
?
答案 0 :(得分:0)
您应该获得访问令牌作为响应的一部分。
一种简单的方法是查看Authorization标头。看下面的代码-
HttpContext.Current.Request.Headers["Authorization"];
另外,我不知道发送令牌进行验证的意思。
如果您尝试手动验证令牌,那么以下示例正是这样做的-
Manually validating a JWT access token in a web API
在示例中,专门查看Global.asax.cs
string jwtToken = null;
AuthenticationHeaderValue authHeader = request.Headers.Authorization;
if (authHeader != null)
{
jwtToken = authHeader.Parameter;
}
if (jwtToken == null)
{
HttpResponseMessage response = this.BuildResponseErrorMessage(HttpStatusCode.Unauthorized);
return response;
}
.........
.........
.........
JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler();
TokenValidationParameters validationParameters = new TokenValidationParameters
{
// We accept both the App Id URI and the AppId of this service application
ValidAudiences = new[] { audience, clientId },
// Supports both the Azure AD V1 and V2 endpoint
ValidIssuers = new[] { issuer, $"{issuer}/v2.0" },
IssuerSigningKeys = signingKeys
};
try
{
// Validate token.
SecurityToken validatedToken = new JwtSecurityToken();
ClaimsPrincipal claimsPrincipal = tokenHandler.ValidateToken(jwtToken, validationParameters, out validatedToken);