OAuth与OpenID:何时以及为什么使用它们感到困惑

3
最近我在阅读关于OpenID和OAuth2的内容。我看到了一些问题(如这个这个),但从我所读的内容来看,你可以使用OAuth进行认证,而不仅仅是授权。对于第二个问题,我读到了以下内容:
如果您在网站上拥有带有某些私有资源的帐户,您可以使用用户名/密码组合进行登录。如果应用程序想要获取某些私有资源,并且您不想向它们提供您的用户名/密码,请使用OAuth。
但是,如果您想使用唯一帐户登录多个网站,请使用OpenID。
这引起了更多的困惑(Dominick Baier在他的演示中说,如果你这些年没有听说过OAuth2,则在过去几年中你一直生活在洞穴里,所以似乎这就是我的情况):如果我拥有许多网络服务(API),并且如果我有一个STS服务来为所有API请求令牌,那么我是否正在使用OpenID? OAuth是否不能扩展授权以使用单个STS服务扩展到多个站点?
当您尝试向我解释时,请考虑我之前没有实施过身份验证或授权过程。
1个回答

3
你是对的:基于OAuth2的许多授权服务器提供了一种身份验证的方式。但是OAuth2并不是为此而设计的。 在OAuth2的上下文中,客户端只有一个访问令牌来检索/管理资源,它对资源所有者一无所知。
这就是为什么创建了OpenID Connect协议。它建立在OAuth2框架协议之上,允许客户端获取有关资源所有者的信息。
我建议您查看这个非常有趣的演讲(从4:44开始)。这个视频帮助了我很多,理解了每个令牌的用途。我希望它也能帮助到你。

对于SPA,它似乎使用'id_token'代替'access_token'。在这种特殊情况下,'id_token'是否真的取代了'access_token'?其中一个原因是,SPA XHR无法与OAuth Token Endpoint通信,因为存在CORS策略。 - Ashokan Sivapragasam
1
id_token提供有关用户的信息(姓名、ID、地址、电话等)。access_token提供访问用户拥有并由资源服务器管理的数据的权限。单页应用程序可以使用两个令牌或仅使用一个。如果SPA无法与令牌端点通信,因为CORS策略的原因,这是因为端点配置存在问题。 - Spomky-Labs
哦,谢谢!我已经在 https://stackoverflow.com/questions/55827056/oauth-2-0-spa-how-does-id-token-disguise-as-an-access-token-for-accessing-re/55827801?noredirect=1#comment98321526_55827801 上讨论过这个问题。 - Ashokan Sivapragasam
现在我明白了,SPA通过获取id_token进行身份验证,并通过从iFrame调用Az Token Endpoint来获取access_token以调用外部Web API。 - Ashokan Sivapragasam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接