资深程序员,

我目前正努力在Web Api 2中使用Microsoft帐户JWT token 验证。
我已经找到了用于此的OWIN中间件(NuGet包Microsoft.Owin.Security.Jwt),这是我的Startup.cs中配置该代码的代码:

    public void ConfigureAuth(IAppBuilder app)
    {
        var sha256 = new SHA256Managed();
        var secretBytes = System.Text.Encoding.UTF8.GetBytes(@"(My app client secret)" + "JWTSig");
        byte[] signingKey = sha256.ComputeHash(secretBytes);

        app.UseJwtBearerAuthentication(
            new JwtBearerAuthenticationOptions
            {
                AllowedAudiences = new[] { "(My API's domain )" },
                IssuerSecurityTokenProviders =
                    new[]
                            {
                                new SymmetricKeyIssuerSecurityTokenProvider(
                                    "urn:windows:liveid", signingKey)
                            }
            });
    }

我在这里找到了该代码段:

http://code.lawrab.com/2014/01/securing-webapi-with-live-id.html

JWT token 是使用Live SDK从Windows Store应用程序客户端发送的。我发送的是身份验证 token ,而不是访问 token ,因此我确定它是JWT。使用这样的在线调试器:http://jwt.io/我能够成功解码 header 和有效负载部分,但是我找不到找到验证签名的方法。发送带有该JWT的请求时,Web API的调试输出为:

Microsoft.Owin.Security.OAuth.OAuthBearerAuthenticationMiddleware错误:0:身份验证失败
System.IdentityModel.Tokens.SecurityTokenSignatureKeyNotFoundException:IDX10500:签名验证失败。无法解析SecurityKeyIdentifier:'SecurityKeyIdentifier
(
IsReadOnly = False,
计数= 1,
条款[0] = System.IdentityModel.Tokens.NamedKeySecurityKeyIdentifierClause
)
',
token :'{“alg”:“HS256”,“kid”:“0”,“typ”:“JWT”}。{“ver”:1,“iss”:“urn:windows:liveid”,“exp “:1408666611,” uid“:”我的Microsoft帐户uid“,” aud“:”(我的API的域)“,” urn:microsoft:appuri“:” ms-app://(客户端应用商店ID)“, “urn:microsoft:appid”:“((来自account.live.com/developers的应用程序的ID)”}
RawData:(JWT token )'。
w System.IdentityModel.Tokens.JwtSecurityTokenHandler.ValidateSignature(字符串 token ,TokenValidationParametersvalidationParameters)
w System.IdentityModel.Tokens.JwtSecurityTokenHandler.ValidateToken(String securityToken,TokenValidationParametersvalidationParameters,SecurityToken&validatedToken)
w Microsoft.Owin.Security.Jwt.JwtFormat.Unprotect(String protectedText)
w Microsoft.Owin.Security.Infrastructure.AuthenticationTokenReceiveContext.DeserializeTicket(字符串protectedData)
w Microsoft.Owin.Security.OAuth.OAuthBearerAuthenticationHandler.d__0.MoveNext()

对不起,我的英语,我们欢迎任何更正。

最佳答案

我可以使用的最简单的方法之一是从Source本身对其进行验证。

在您的情况下,您现在正在使用live.com,然后向live.com发送一个请求,并在 header 中使用您的 token ,如果它是有效的 header ,它将返回已知值(例如,用户帐户信息)

选择这样的网址:
https://outlook.live.com/ows/v1.0/OutlookOptions

并将 token 作为授权发送给 header :承载TOKEN_VALUE

如果返回了期望值,则它是一个有效的 token , session 也正在运行

关于c# - 验证Live.com(Microsoft帐户)JWT token ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25434247/

10-17 01:02