asc*_*99c 3 session openid-connect
我正在编写要使用OpenID Connect(OIDC)进行保护的API后端。我一直在阅读文档,但仍然有些困惑,每个API请求适用什么流程。Open ID Connect代码流似乎是:
作为一次过程,我很好。我的后端API在HTTP标头中看到授权码,然后向授权服务器发送请求以获取ID令牌。假设这可以验证正常,则请求的数据将在API响应中返回。
但是,假设同一用户随后将对此API发出大量请求,那么在后续请求中会发生什么?是否在这种机制中创建了某种会话?我会继续收到相同的授权码吗?我是否必须继续将这些反向通道请求发送到授权服务器?
还是应该将JWT id令牌输出为cookie?这样,我就可以在以后的请求中返回自包含的id令牌,而无需服务器端会话或进一步的往返。
我一直在阅读文档,但仍然有些困惑,每个API请求适用什么流程
遵循OpenID连接协议的不是API。应该由客户来做。
我的后端API在HTTP标头中看到授权码,然后向授权服务器发送请求以获取ID令牌。假设这可以验证正常,则请求的数据将在API响应中返回。
授权代码必须由客户端应用程序使用,而不由API端点使用。同样,授权码绝不能公开给其他实体。
您应该使用与OpenID Connect一起发送的ID令牌来验证客户端应用程序中的最终用户。要访问API,您应该使用访问令牌。
在API端点中做什么?
我认为这是您奋斗的地方。您的客户端应用程序应发送有效的访问令牌,以访问API端点。从API端点,您可以使用OAuth 2.0自省端点来验证令牌。
该规范定义了一种协议,该协议允许授权的受保护资源查询授权服务器,以确定由OAuth 2.0客户端提供给它们的给定令牌的元数据集。
请注意,OpenID Connect建立在OAuth 2.0之上。这意味着您可以使用OAuth 2.0中定义的任何内容,包括自省端点。使用此端点来验证访问令牌的有效性。
如果您想要最终用户的详细信息怎么办?
OpenID Connect定义用户信息端点
UserInfo端点是OAuth 2.0受保护的资源,它返回有关经过身份验证的最终用户的声明。为了获得所请求的有关最终用户的声明,客户端使用通过OpenID Connect身份验证获得的访问令牌向UserInfo端点发出请求。这些声明通常由JSON对象表示,该对象包含声明的名称和值对的集合。
同样,在这里,您使用访问令牌从该端点获取用户信息。该响应将使您知道向其颁发此令牌的最终用户。
根据您特定的API要求,您可以进行令牌自省或从用户信息端点获取用户信息。完成后,您可以继续进行会话身份验证。如果需要所有可用信息,则可以使用两个端点。
另外(而不是会话),您的API可以维护访问令牌缓存。这样就无需在每个API调用中都验证令牌。但是请注意,令牌具有到期时间。如果选择此解决方案,则必须考虑令牌过期。
ps-客户端与资源服务器
用OpenID Connect和OAuth 2.0术语,客户端可以是简单的网页,桌面应用程序,甚至可以是服务器托管的应用程序。
客户(client) 代表资源所有者及其授权提出受保护资源请求的应用程序。术语“客户端”并不暗示任何特定的实现特征(例如,应用程序是否在服务器,台式机或其他设备上执行)。
获取令牌并使用它们是客户端应用程序的职责。
另一方面,资源服务器包含受保护的资源,
资源服务器 托管受保护资源的服务器,能够使用访问令牌接受和响应受保护资源请求。
资源服务器交换其资源以访问令牌。如果我们将同一场景与基本身份验证相匹配,则访问令牌将替换身份验证标头发送的用户名/密码。