我有一个桌面应用程序,我通过AuthenticationContext.AcquireTokenAsync
通过Azure验证用户。
使用此方法的结果,我可以获取访问令牌,将其发送到我的WCF,并在我的WCF中使用JwtSecurityToken
/ ConfigurationManager< OpenIdConnectConfiguration >
来验证令牌。
我现在通过使用app.UseOpenIdConnectAuthentication
配置Azure,在Web应用程序中实现了登录。所以在我的网络应用程序中,我没有显式调用返回令牌的方法。相反,我把它插入到asp.net的流程中。
但是现在我想在一个方法中获取令牌并将其发送给我,以便我在桌面应用程序中进行类似的验证。我找不到ConfigurationManager
接受的任何令牌。我看过常规的HttpContext
和Owincontext
,但没有我发现有用的信息。 accesstoken
存储在我可以获取它的任何地方吗?或者我是否需要另外请求获得accesstoken
?
您应该获取访问令牌作为响应的一部分。
一种简单的方法是查看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);