首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OAuth 2与OpenID连接到安全API

OAuth 2与OpenID连接到安全API
EN

Security用户
提问于 2015-07-26 18:02:30
回答 2查看 21.2K关注 0票数 37

我正在开发一个Web,它将支持几个应用程序:一个网站,一个配套的移动应用程序(S),可能还有几个第三方应用程序。每个应用程序都将从auth服务器获得一个访问令牌,然后将其提供给API,用户将在auth服务器web界面(用于第三方应用程序)或直接在网站或应用程序(用于“受信任”应用程序)上输入他们的凭据。客户端应用程序本身不需要用户身份。

我已经开始通过OAuth 2实现它,它与我的用例完全匹配。但是后来我在网上发现了一些讨论,让我思考我的场景是否真的需要OpenID连接,而现在,在读了几千字之后,我仍然无法确定哪一个更适合我的情况。

(例如,GitHub与我的用例使用 OAuth 2基本匹配)

我想听听关于如何选择一个人的API是需要OAuth 2还是OpenID连接的指导方针。

更新

让我困惑的是:不使用OAuth进行身份验证有一个有效的点。但是考虑一下这种情况(假设有一个简单的业务规则:每个用户只能看到自己的文档):

  • 应用程序转到auth服务器以获取令牌。
  • 用户授权应用程序,因此令牌被授予。
  • app与数据标记一起转到api。
  • api为授权令牌的用户返回文档(因此令牌可以追溯到用户)

这是身份验证场景还是授权场景?

PS。我知道这个问题,但最好的答案并不能解决我的疑虑。

EN

回答 2

Security用户

回答已采纳

发布于 2015-07-30 02:43:25

从您所解释的情况来看,OAuth 2.0似乎更适合您的需要。OpenID连接是为了向OAuth 2.0添加安全身份验证而开发的。大型提供商,如Google、Facebook、Yahoo等,开始使用OAuth 2.0来通过“登录”服务对用户进行身份验证,这样用户就可以使用他们的凭据对各种第三方服务进行身份验证。由于协议中的缺陷,标准的OAuth 2.0无法安全地满足这一要求。OpenID连接解决了这些缺陷,并允许提供者安全地使用OAuth 2.0作为身份验证框架。OAuth 2.0最初是作为授权框架开发的,它允许用户授予第三方服务对其存储在提供者上的数据的访问权限。您所描述的场景看起来就像OAuth 2.0所开发的那样。如果您不打算提供“使用登录”机制,请使用OAuth 2.0。

如果用户将拥有自己的第三方服务凭据,而不使用提供者凭据登录服务,则不需要OpenID连接。

是我找到的最有用的资源。这是OpenID的一位设计师写的一篇博客文章,讨论了OAuth 2.0的不同用途。

票数 21
EN

Security用户

发布于 2015-07-30 18:22:52

首先,您可能知道,OpenID连接只是一个建立在OAuth2之上的身份验证层。因此,无论您选择哪一个,您都需要实现OAuth2 (作为公共分母)。

OAuth2本身是一种授权机制(即允许您检查令牌是否有效,并具有授予的一组特定范围)。它不提供开箱即用的身份验证(您不能立即区分“谁”是用户)。

但是,在许多情况下,您可能同时需要授权和身份验证。在这种情况下,您需要在OAuth2之上建立一个层来提供这种功能。最常见的方法是让资源服务器公开某种类型的“我是谁?”返回与访问令牌关联的用户的标识的端点。

OpenID连接可以做到这一点,并提供了一种标准的方法来获取和表示用户标识(即UserInfo端点返回的对象)为一组索赔要求

它还允许客户端应用程序接收用户信息以及访问令牌(这是令牌端点返回的id_令牌,或者与授权代码一起包含的签名JWT令牌,这取决于您的流程),它保存了一个HTTP请求。

OpenID连接还提供了一些其他的东西,而这些东西的国际海事组织兴趣较小(动态注册等)。

因此,要回答关于OAuth2与OpenID连接的问题:如果您需要对API进行身份验证,则必须在OAuth2之上实现它。您可以做一些自定义的事情,也可以实现OpenID连接。如果您想要实现整个规范,OpenID连接是非常复杂的,但是如果您只想实现MVP来对用户进行身份验证(实现用户信息端点并使用标准表示,或者发布id_tokens),则相对容易。

有关更多信息,请参见OpenID连接规范

票数 11
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/94995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档