Session 使用OIDC在每个API请求中发送哪些信息

Session 使用OIDC在每个API请求中发送哪些信息,session,openid-connect,Session,Openid Connect,我正在编写一个API后端,我想使用OpenID Connect(OIDC)来保护它。我一直在阅读文档,但我仍然有点困惑,什么过程适用于每个API请求。Open ID Connect代码流似乎是: 我同意,这是一个一次性的过程。我的后端API在HTTP头中看到授权代码,并向授权服务器发送请求以获取id令牌。假设这验证了OK,请求的数据将在API响应中返回 但是假设同一个用户随后会向这个API发出大量请求,那么在后续请求中会发生什么呢?在这个机制中是否创建了某种会话?我是否继续收到相同的授权码?我是

我正在编写一个API后端,我想使用OpenID Connect(OIDC)来保护它。我一直在阅读文档,但我仍然有点困惑,什么过程适用于每个API请求。Open ID Connect代码流似乎是: 我同意,这是一个一次性的过程。我的后端API在HTTP头中看到授权代码,并向授权服务器发送请求以获取id令牌。假设这验证了OK,请求的数据将在API响应中返回

但是假设同一个用户随后会向这个API发出大量请求,那么在后续请求中会发生什么呢?在这个机制中是否创建了某种会话?我是否继续收到相同的授权码?我是否必须继续将这些反向通道请求发送到授权服务器

或者我甚至应该将JWTID令牌作为cookie输出?通过这种方式,我可以在将来的请求中获得自包含的id令牌,而不需要服务器端会话或进一步的往返。

通常,您需要使用OAuth 2.0保护(纯)API,而不是OpenID Connect。访问API的客户端应该获得OAuth 2.0访问令牌,为此,它可以选择使用OpenID Connect来获取该令牌。这一切都与API无关,API只会看到访问令牌。图中未描述API(或OAuth 2.0术语中的资源服务器)

我一直在阅读文档,但我还是有点困惑什么 该过程适用于每个API请求

API不应该遵循OpenID连接协议。应该由客户来做

我的后端API在HTTP头中看到授权代码,并且 向授权服务器发送请求以获取id令牌。 假设这验证了OK,那么请求的数据将在API中返回 答复

授权代码必须由客户端应用程序使用,而不是由API端点使用。此外,授权代码决不能向其他实体公开

您应该使用与OpenID Connect一起发送的id令牌从客户端应用程序对最终用户进行身份验证。要访问API,您应该使用访问令牌

在API端点中做什么?

我想这就是你挣扎的地方。您的客户端应用程序应发送有效的访问令牌以访问API端点。从API端点,您可以使用OAuth 2.0内省端点来验证令牌

本规范定义了允许授权的协议 要查询授权服务器以确定的受保护资源 由提供给他们的给定令牌的元数据集 OAuth2.0客户端

注意,OpenID Connect构建在OAuth 2.0之上。这意味着您可以使用OAuth2.0中定义的任何内容,包括内省端点。使用此端点验证访问令牌的有效性

如果需要最终用户的详细信息怎么办?

OpenID Connect定义用户信息端点

UserInfo端点是受OAuth 2.0保护的资源,它返回关于经过身份验证的最终用户的声明。为了获得请求的关于最终用户的声明,客户端使用通过OpenID Connect身份验证获得的访问令牌向UserInfo端点发出请求。这些声明通常由JSON对象表示,该对象包含声明的名称和值对集合

在这里,您还可以使用访问令牌从该端点获取用户信息。响应将让您知道向其发出此令牌的最终用户

根据您特定的API需求,您可以执行令牌内省或从user info端点获取用户信息。完成后,您可以继续验证会话。如果需要所有可用信息,可以同时使用两个端点

或者(代替会话),API可以维护访问令牌缓存。这将消除在每个API调用中验证令牌的需要。但请注意,代币有到期时间。如果选择此解决方案,必须考虑令牌过期。

p.s-客户端与资源服务器

在OpenIDConnect和OAuth2.0术语中,客户端可以是简单的网页、桌面应用程序,甚至可以是服务器托管的应用程序

客户端 代表服务器发出受保护资源请求的应用程序 资源所有者及其授权。“客户”一词不起作用 不暗示任何特定的实施特征(例如。, 应用程序是否在服务器、桌面或其他计算机上执行 设备)

获取令牌并使用它们是客户端应用程序的职责

另一方面,资源服务器包含受保护的资源

资源服务器 承载受保护资源的服务器,能够接受 以及使用访问令牌响应受保护的资源请求


资源服务器交换它的资源以访问令牌。如果我们将相同的场景与基本身份验证匹配,则访问令牌将替换使用身份验证头发送的用户名/密码

我使用OpenID connect作为一站式身份验证和授权协议,而不是在OAuth2上构建临时协议。API由一个后端应用程序提供服务,该应用程序已经有自己的独立接口供我们自己的员工使用,但这不适合internet部署是的,我认为这很有帮助。我一直认为客户机是我的“应用程序”,包括前端和后端。因此,我认为与其他回复一样,客户端纯粹是前端的Ember应用程序。我刚刚意识到我的IDP的管理界面的登录过程完全遵循这个模型,“反向通道”请求实际上只是一个AJAX请求