为什么每个 OAuth2 提供者的工作方式都不一样?
Why does every OAuth2 provider work differently?
这让我很烦,也许我只是理解错了,但似乎几乎每个 OAuth2 提供商在使用他们的服务时都有自己的细微差别。 OAuth2 应该是处理身份验证的标准方式,为什么不是呢?
好吧,如果您谈论的是 OAuth2 理论上提供的 4 个流程(Authorization Code
、Implicit
、Password Credentials
、Client Credentials
),那么你是对的:大多数提供商不提供 4 个流程(通常只提供前 2 个)。
我的建议是选择 授权码 流程(如果可能),因为此流程对于所有大型提供商(Google、雅虎、Outlook.com, 等等).
它们之间会发生什么变化:请求参数。因此,如果您为授权代码流程编写通用代码(请求 auth
代码,通过 token
交换它),只需切换每个提供者的特定参数,您将实现可重用代码。
尝试更清楚:您可以使用 OAuth2
class 来处理所有流程,直到您获得令牌。
然后 URL 和请求参数将属于提供者 classes,如 Google
、Yahoo
等。将这些 classes 传递给 OAuth2
作为参数。
OAuth 2.0 本身是一个协议框架,而不是一个协议。它允许在其之上构建其他协议。这就是为什么有许多选项可供选择,今天可能会使事情变得有点复杂。
此外,OAuth 2.0 本身甚至根本不处理用户身份验证(参见:http://oauth.net/articles/authentication/),因为它不是身份验证协议,而是允许委托授权的协议。
然而,一些提供商一直在 OAuth 2.0 之上构建自己的扩展来处理用户身份验证。还有一个以 OpenID Connect (http://openid.net/specs/openid-connect-core-1_0.html) 的形式在 OAuth 2.0 之上定义的标准化用户身份验证协议。
希望在不久的将来,越来越多的供应商会将其基于 OAuth 2.0 的用户身份验证协议迁移到 OpenID Connect,我们将摆脱供应商之前在 OpenID Connect 尚未标准化时必须构建的无数变体。
这让我很烦,也许我只是理解错了,但似乎几乎每个 OAuth2 提供商在使用他们的服务时都有自己的细微差别。 OAuth2 应该是处理身份验证的标准方式,为什么不是呢?
好吧,如果您谈论的是 OAuth2 理论上提供的 4 个流程(Authorization Code
、Implicit
、Password Credentials
、Client Credentials
),那么你是对的:大多数提供商不提供 4 个流程(通常只提供前 2 个)。
我的建议是选择 授权码 流程(如果可能),因为此流程对于所有大型提供商(Google、雅虎、Outlook.com, 等等).
它们之间会发生什么变化:请求参数。因此,如果您为授权代码流程编写通用代码(请求 auth
代码,通过 token
交换它),只需切换每个提供者的特定参数,您将实现可重用代码。
尝试更清楚:您可以使用 OAuth2
class 来处理所有流程,直到您获得令牌。
然后 URL 和请求参数将属于提供者 classes,如 Google
、Yahoo
等。将这些 classes 传递给 OAuth2
作为参数。
OAuth 2.0 本身是一个协议框架,而不是一个协议。它允许在其之上构建其他协议。这就是为什么有许多选项可供选择,今天可能会使事情变得有点复杂。
此外,OAuth 2.0 本身甚至根本不处理用户身份验证(参见:http://oauth.net/articles/authentication/),因为它不是身份验证协议,而是允许委托授权的协议。
然而,一些提供商一直在 OAuth 2.0 之上构建自己的扩展来处理用户身份验证。还有一个以 OpenID Connect (http://openid.net/specs/openid-connect-core-1_0.html) 的形式在 OAuth 2.0 之上定义的标准化用户身份验证协议。
希望在不久的将来,越来越多的供应商会将其基于 OAuth 2.0 的用户身份验证协议迁移到 OpenID Connect,我们将摆脱供应商之前在 OpenID Connect 尚未标准化时必须构建的无数变体。