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

Posted

技术标签:

【中文标题】在我的 ASP.NET Web API 中验证访问令牌【英文标题】:Validating an access token in my ASP.NET Web API 【发布时间】:2017-06-17 21:11:44 【问题描述】:

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

我还创建了移动应用程序应与之通信的 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 还是 Google? 【参考方案1】:

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

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

签名用于验证令牌的真实性,因此只有身份验证服务器需要。如果 Google 是您的身份验证服务器,那么应​​该有一个 API 端点,您可以从您的服务器调用以验证令牌是否有效。

如果您的服务器正在发布 JWT 令牌,那么您需要通过使用最初用于创建它的秘密对签名进行解码来检查令牌是否有效

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

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

【讨论】:

感谢您的回答!是的,Google 是我的身份验证服务器。我不自己跑。所以,在我的服务器端(在启动>配置中),我应该使用 app.UseJwtBearerAuthentication(...) 吗?要么?我应该在服务器端的哪个位置执行对 Google-API 的验证调用?问候安德烈亚斯 使用自定义 Authorization och Authentication 属性? @Brosten - 我不熟悉您使用的谷歌身份验证,也许您可​​以将我链接到 API 或其他东西?

以上是关于在我的 ASP.NET Web API 中验证访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

ASP.net core web api:使用 Facebook/Google OAuth 访问令牌进行身份验证

ASP.NET Web API 授权和身份验证

ASP.NET Core Web API 身份验证

ASP.NET Web API 的 JWT 身份验证

ASP.NET Web API 的 JWT 身份验证

ASP.NET Web API 的 JWT 身份验证