使用openidconnect

时间:2018-09-01 13:51:48

标签: c# azure openid-connect

我有一个台式机应用程序,我在其中通过AuthenticationContext.AcquireTokenAsync通过Azure验证用户。

使用此方法的结果,我可以获得访问令牌,并将其发送到WCF,然后在WCF中使用JwtSecurityToken / ConfigurationManager< OpenIdConnectConfiguration >来验证令牌。

我现在已经通过使用app.UseOpenIdConnectAuthentication配置Web应用程序中的Azure登录。因此,在我的Web应用程序中,我没有明确调用返回令牌的方法。而是我将其插入asp.net的流程中。

但是现在我想用一种方法来获取令牌,然后将其发送给我以进行验证,就像我在桌面应用程序中所做的一样。我找不到ConfigurationManager接受的任何令牌。我查看了常规HttpContextOwincontext,但没有找到有用的信息。 accesstoken是否存储在我可以获取的任何地方?还是我必须再次请求获取accesstoken

1 个答案:

答案 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);