OpenID连接JWT令牌验证和使用策略后端api - jwks或会话?



我对OIDC的后端api授权流程有点困惑。

我有react SPA应用程序与rest后端api。

我想允许应用程序客户端注册自己的OIDC提供商用于登录/注册。

OpenID Connect JWT令牌验证和使用的策略是什么?

目前我这样做:

  1. 客户端添加提供商指定clientId,clientSecret,issuer
  2. 在后台,我使用OIDC Discovery获取提供商元数据。
  3. 客户端点击登录按钮后,使用提供程序与验证码流,我们结束后端回调处理程序,我在那里交换代码:
{
access_token: 'str',
id_token: 'str.str.str',
scope: 'openid profile email',
expires_at: 1628797367,
token_type: 'Bearer'
}

现在是一个问题,下一步该做什么?什么令牌发送到应用程序的api请求使用和如何验证它在每个请求?

我可以发送id_token到应用程序,然后在每个api请求使用从提供程序JWKS加载来验证id_token

或者我可以根据id_token授权/注册用户,并创建我自己的JWT令牌,该令牌将发送给应用程序供api请求使用。

使用的包:hapi, node-openid-client

所以id_token用于提供关于经过身份验证的用户的信息。访问令牌是用来访问用户资源的令牌。

您可以在后端验证和解码id_token,并使用它在系统中注册一个新用户,并为他们创建会话-或者如果它是一个已经注册的用户,则仅创建会话。

问题是-什么后端资源是你的SPA调用。如果这些是OIDC Provider控制的api,那么您只需要将它们的访问令牌添加到请求中,请求就会被验证。不过,我假设这些是您的api。然后你有两个选择:

  1. 如果OP暴露了自省端点,那么如果您从OP接收到访问令牌,您仍然可以使用它来访问api。每次从SPA收到请求时,您都必须调用OP来检查令牌是否有效,并可能获取与该令牌相关的数据,如发行者、主题、受众等。您可以使用这些声明来执行授权决策——是否允许访问该请求。

  2. 使用OP完成授权代码流程后,您可以根据从OP获得的信息发出自己的访问令牌。然后您可以轻松地对每个请求验证该令牌。在这种情况下,您可以更好地控制令牌中的内容—例如,您可以为用户引入角色等。

如果您只访问自己的api,并且已经有了执行OIDC流的后端,我建议将OP的响应保留在后端,并向SPA发出一个普通的旧会话。api可以通过调用授权后端来验证会话。这样,您就不会在SPA中放置令牌。

最新更新