使用openidconnect从web中的azure获取accessstoken

问题描述 投票:0回答:1

我有一个桌面应用程序,我通过AuthenticationContext.AcquireTokenAsync通过Azure验证用户。

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

我现在通过使用app.UseOpenIdConnectAuthentication配置Azure,在Web应用程序中实现了登录。所以在我的网络应用程序中,我没有显式调用返回令牌的方法。相反,我把它插入到asp.net的流程中。

但是现在我想在一个方法中获取令牌并将其发送给我,以便我在桌面应用程序中进行类似的验证。我找不到ConfigurationManager接受的任何令牌。我看过常规的HttpContextOwincontext,但没有我发现有用的信息。 accesstoken存储在我可以获取它的任何地方吗?或者我是否需要另外请求获得accesstoken

c# azure openid-connect
1个回答
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);
© www.soinside.com 2019 - 2024. All rights reserved.