【问题标题】:Is it appropriate to use Oauth2 only for first-party clients?仅将 Oauth2 用于第一方客户端是否合适?
【发布时间】:2020-04-16 17:04:10
【问题描述】:

我已经阅读了很多有关 Oauth2 授权的信息,但我似乎无法找到我的问题的明确答案,所以我希望你们中的一个可以在这里帮助我。

如果我理解正确,Oauth2 是专门为将您的部分 API 授权给公共第三方客户端而设计的。我似乎在规范中找不到任何关于授权第一方客户的内容。我已经阅读了一些关于使用隐式授权类型的文章,但感觉就像为此目的使用隐式授权类型,并不是规范的设计目的。

假设我有一个 API,我想通过 Web 应用程序和本机移动应用程序访问它。用户可以在这些应用程序上创建帐户并访问 API 的某些部分。我还想要一个可以访问 API 的所有部分的管理门户。所以我需要在我的 API 中进行某种授权,但是由于所有这些应用程序都是第一方客户端(由我制作),所以在这里使用 Oauth2 感觉不对。

因此我的问题是,将 Oauth2 用于第一方应用程序是否合适?如果不合适,还有什么可以替代第一方客户端的授权?

【问题讨论】:

    标签: authentication oauth-2.0 authorization


    【解决方案1】:

    OAuth 2.0 用于服务到服务的授权。

    当涉及到用户身份验证时,OpenID Connect 是正确的选择。

    您可以在 OpenID Connect 中使用“prompt parameterAuthentication Request 是一个可选的以空格分隔、区分大小写的 ASCII 字符串值列表,指定授权服务器是否提示资源所有者重新进行身份验证和同意。

    通常,使用值“none”,授权服务器不得显示任何身份验证或同意用户界面页面。

    【讨论】:

    • 感谢您的回复! OpenID 是建立在 Oauth 之上的,对吧?它仍然是第一方客户的正确选择,因为 Oauth 最初是为第三方客户设计的,如另一个答案中所述?
    • 我认为没有理由在这些条件下不使用 OAuth/OIDC,这就是许多组织使用 OIDC 并在商业产品中实施的方式。
    【解决方案2】:

    OAuth 的最初目标是允许第三方应用代表您访问 API,而无需向他们提供您的凭据。

    现在,如果您拥有所有参与者(客户端、授权服务器和资源服务器),则用户会将其凭据提交给您拥有的东西(登录时的授权服务器)。

    另一件事是同意屏幕的价值可能较低,因为客户是由已经管理您的资源的同一家公司制作的。用户可能仍希望减少某些客户端的权限(例如,只允许您的移动客户端读取您的银行交易,而网络客户端可能会创建新交易)。

    话虽如此,OAuth2 仍然是任何客户端获取 API 访问令牌的好协议。您可以使用现成的库在您的应用程序和服务中实现它,避免实现您自己的身份验证系统。

    为您的 API 使用 OAuth2 将使您能够在以后轻松地允许第三方客户端。

    【讨论】:

    • 感谢您的回复!不过,在例如管理面板中向用户显示“权限”屏幕不是很奇怪吗?
    • 视情况而定。同意屏幕实际上是让用户将权限委派给客户端应用程序。对于第一方应用程序,您可以将它们全部跳过,或者实现基于角色的授权模型之类的东西,由其他人确定用户的角色,从而确定用户可以做什么。
    猜你喜欢
    • 2011-07-25
    • 2012-05-11
    • 2011-12-27
    • 1970-01-01
    • 2016-09-09
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    相关资源
    最近更新 更多