【问题标题】:Architecture Token Authentication: Web API, Xamarin and External Authentication [closed]架构令牌身份验证:Web API、Xamarin 和外部身份验证 [关闭]
【发布时间】:2017-05-15 07:25:11
【问题描述】:

背景

我正在使用 Xamarin(应用程序)和 Web API(端点)开发应用程序。该应用程序不实现自己的身份验证,它使用外部身份验证(Google、Facebook、Twitter)。 Xamarin 可以处理名为Xamarin.Auth 的外部身份验证。

问题

我了解Xamarin.Auth 的工作原理以及如何存储访问令牌。但是我还有一些问题没有找到答案。

  1. 我的 Web API 如何知道它已经过身份验证并且现在应该允许访问端点?

  2. 我是否还需要令牌身份验证机制才能让我的应用和 API 进行安全通信?

  3. 我可以使用外部身份验证服务创建的相同令牌并存储在数据库中并使用它进行通信吗?如果是这样,我将如何遇到令牌无效的情况?

更新 1

我对工作流程仍有一些困惑和疑问,所以创建了一个图表。

  1. oAuth 2.0(谷歌、Facebook、其他)。
  2. 客户端从外部身份验证接收令牌。
  3. 客户端调用 API。 在这个阶段,API 如何知道身份验证已经完成? 客户端是否将令牌发送回 API?
  4. 如果客户端确实发送了令牌。 API 如何知道它是有效令牌? 以及什么时候过期?
  5. 有人可以解释一下身份验证后 API 和客户端之间的这种工作流程吗?

【问题讨论】:

  • 我已经更新了我的答案。如果您还有其他问题,请告诉我。

标签: c# authentication asp.net-web-api xamarin


【解决方案1】:

更新答案

基本上,您所要求的称为Bearer Token Flow,详细描述here

section 1.3 中的图 1 所示,一旦客户端成功通过身份验证,授权服务器会授予一个访问令牌。然后,您的资源服务器(您的 API)使用此令牌来请求资源。为此,您需要在追索请求中包含令牌。这样做的方法在section two 中有描述。

收到访问令牌后,您还可以选择收到refresh token。一旦这些令牌过期或失效,应该使用刷新令牌来检索新的访问令牌。刷新令牌在访问被撤销或被14 days as a default 撤销之前一直有效。 虽然,正如我在原始答案中提到的,Xamarin.Auth 尚不支持刷新令牌,但 well-defined blog post 已定义如何支持它们。

现在,如果在您尝试请求资源后出现任何问题,您将从资源服务器获得一个error_code,具体取决于section 3.1 中看到的当前问题。 例如,当令牌过期时,状态码将为invalid_token。在这种情况下,如果您不使用刷新令牌,用户将需要重新进行身份验证。如果你是,并且刷新令牌仍然有效,将提供一个新的访问令牌,生活将照常进行。

最后一点,Access Token Reponse 包含一个名为expires_in 的可选字段。您可以使用此字段了解访问令牌何时过期。

原答案

  1. 我的 Web API 如何知道它已经过身份验证并且现在应该 允许访问端点?

here 所示,一旦调用auth.Completed 并且AuthenticatorCompletedEventArgsIsAuthenticated,您就知道用户已使用给定的身份提供程序进行身份验证。

  1. 我是否还需要令牌身份验证机制才能让我的应用和 API 安全通信?

是的。一旦你从身份提供者那里得到一个令牌,你应该使用它来继续前进,因为它包括用户的权限和身份,而不直接暴露用户名和密码。你可以阅读更多关于here的信息。

  1. 我可以使用外部身份验证服务创建的相同令牌吗 并存储在数据库中并使用它来进行通信?如果是这样如何 我会遇到令牌无效的情况吗?

是的。事实上,如上所述,这是你应该做的。您可以使用 JWT 验证身份提供者提供的令牌,以根据您自己的 API 验证令牌。

不过,今后您应该使用refresh token。 尽管Xamarin.Auth 尚不支持这些功能。如果你发现他们不是,here 是一个很好的指导如何处理这种情况。

祝你好运!

【讨论】:

    猜你喜欢
    • 2012-08-06
    • 2018-07-19
    • 2017-02-05
    • 1970-01-01
    • 2017-09-28
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多