繁体   English   中英

验证ASP.NET Web API中的访问令牌

[英]Validating an access token in my ASP.NET Web API

我有一个移动客户端(app)让用户通过谷歌进行身份验证。 因此,客户端从谷歌接收访问令牌和一些信息(姓名,电子邮件等)。 工作正常!

我还创建了一个移动应用程序应该与之通信的ASP.NET Web API。 在客户端,我将令牌添加到HttpClient:client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(“bearer”,“pretty_long_access_token_separated_by_two_dots”);

问题1:我正在尝试“解码”此站点上的访问令牌(以确保它没问题): https//jwt.io/标题和有效负载是正确的,但它似乎是“无效的签名“(在底部说)。 我应该担心吗?


在服务器端,我将其添加到Startup类中的Configuration方法:

app.UseJwtBearerAuthentication( new JwtBearerAuthenticationOptions
{
    AuthenticationMode = AuthenticationMode.Active,
    AllowedAudiences = new List<string> {"my_client_id"},
    IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[]
    {
        new SymmetricKeyIssuerSecurityTokenProvider(@"https://accounts.google.com/", "my_client_secret")
    },
});

在我的服务器端,我唯一想要使用令牌的是确保只有我应用程序中经过验证的用户才能访问我的API控制器。

问题2:UseJwtBearerAuthentication对我来说是正确的,还是我朝错误的方向走?

我的问题是,在尝试访问我的WEB API控制器时,我经常获得401,未经授权。

如果我走在正确的轨道上,我可以尝试解释有关服务器端设置的更多信息......

任何头盔都非常感激!

如果您使用的是JWT令牌,那么您将需要JWT而不是Bearer

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("JWT", "pretty_long_access_token_separated_by_two_dots");

签名用于将令牌验证为可信令牌,因此只有身份验证服务器才需要。 如果Google是您的身份验证服务器,那么您应该可以从服务器调用API端点来验证令牌是否有效。

如果您的服务器发出JWT令牌,那么您需要通过使用首先用于创建签名的秘密解码签名来检查令牌是否有效

如果Google发布JWT并且您希望您的服务器能够自我验证它,那么您需要使用另一种加密类型,例如RS256,这将允许您使用Google发布的公钥验证签名(我不知道如果他们提供这种方法或不

https://jwt.io/无法验证您的签名的原因是因为它是使用密码签名的。 如果您有此密码,则可以将其粘贴到右下方的文本框中。 如果密钥是正确的,并且令牌尚未过期,则它将显示为有效的JWT令牌。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM