【问题标题】:Using OpenId Connect for securing API使用 OpenId Connect 保护 API
【发布时间】:2020-09-13 00:24:42
【问题描述】:
我有几个 REST API,我想使用联合授权服务器来保护它们。此页面:https://oauth.net/articles/authentication/ 建议仅 OAuth2 不足以进行身份验证,应该使用 OpenId Connect 扩展来正确处理。
但是,我觉得 OIDC 所做的只是定义身份端点以及相关的范围和声明。如果我不是特别需要这些身份声明,那么使用普通 OAuth 授权代码来验证用户和保护资源有什么问题?还是 OAuth2 仅用于委派对代表用户工作的客户端应用程序的访问(这不是我的用例)?
感谢您的意见!
【问题讨论】:
标签:
api
oauth
oauth-2.0
openid
openid-connect
【解决方案1】:
OAuth 是一个授权框架。正如您在问题中所述,在 OpenID Connect 之前,一些组织越来越多地使用 OAuth 作为身份验证机制。虽然这在技术上是可行的,但在一个实现与下一个实现之间存在着不一致。这种方法的标准化来自 OpenID Connect,这组供应商基本上说让我们为我们一直在做的事情提出一个标准化的方法。标准化方法的好处是协作、安全等。OAuth 的 openid 范围就此诞生。
【解决方案2】:
大多数与最终用户身份验证相关的工作都发生在 UI 方面,当然还涉及授权重定向、身份提供者、同意表单等。
就安全 REST API 的代码而言,您改为执行以下类型的操作。正如您所说,这主要是 OAuth 2.0 行为,尽管 Open Id Connect 端点可能很有用:
- 验证从授权服务器接收到的访问令牌
- 读取令牌声明以识别经过身份验证的用户
- 为此,您可能需要从 JWKS 端点下载令牌签名密钥
- 您的 API 可以从 User Info 端点查找更多详细信息
- 您的 API 可以使用元数据端点获取上述端点位置
- 然后,您的 API 将根据声明和范围应用授权规则