使用第三方服务(Okta、Auth0 等)以编程方式创建 OIDC ID 令牌,而无需在服务中拥有用户

问题描述 投票:0回答:1

在我的后端服务器中,是否可以使用第三方 (3p) 服务(例如 Okta、Auth0 等)以编程方式创建 OIDC ID 令牌?没有在 3p 服务中定义我的所有用户?然后这个 3p 还为我提供了

.well-known/openid-configuration
client secret
,我可以将它们提供给其他应用程序(依赖方),然后可以验证我铸造的 OIDC ID 令牌?

问题:我是一个具有自定义用户池的活动平台。其中一些用户甚至没有使用密码或任何东西进行注册;他们只是使用电子邮件和姓名注册了该活动。我正在使用嵌入在我的网站中的一些

product P
(依赖方),希望我通过 OIDC ID 令牌对用户进行身份验证。

  • 我决定应允许我网站上的某些用户
    U
    参加该活动。
  • 我为
    U
    铸造了一个OIDC ID令牌:
    okta.mintIDToken({scopes: {name: 'foo', email: '[email protected]'}})
  • 我给予
    P
    铸造的OIDC ID令牌
  • P
    使用我提供的
    .well-known/openid-configuration
    client secret
    验证令牌
  • 用户
    U
    可以使用我网站中的嵌入式产品
    P
    !成功了!

复杂性:我不想从头开始构建一个身份平台(IdP),以及我必须支持的所有公共端点(

jwks_uri
revocation_endpoint
等)。我尝试使用 Okta 和 Auth0,但我尝试的方法要求我拥有所有用户,我可以为 3p 的用户数据库中预定义创建 OIDC ID 令牌,或者它们要求用户通过签名在我的网站上流动。

Okta 或 Auth0 中是否有我误解的服务实际上具有此功能?如果没有,还有其他服务可以帮助我吗?

openid-connect auth0 okta
1个回答
0
投票

用户断言

代表用户做某事的最标准的解决方案。根据RFC7523,当身份验证和同意在带外管理时,是使用 JWT 作为授权。这些有时被称为

user assertions
。这样做时,当然要考虑对业务用例的任何潜在安全影响。

示例

为了发出用户断言 JWT,应用程序使用类似于 我的 Node.js 代码 的代码。然后使用

grant_type
urn:ietf:params:oauth:grant-type:jwt-bearer
如下发送断言:

POST /oauth/v2/token HTTP/1.1
Host: localhost:8443
Content-Type: application/x-www-form-urlencoded

client_id=userassertionclient&
client_secret=mysecret& 
grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&
assertion=eyJhbGciOiJSUzI1N...

在授权服务器中,将配置 OAuth 客户端,其属性之一是所使用的公钥 (JWK),该公钥对应于用于签署 JWT 断言的私钥。这使得授权服务器能够验证请求。

发行代币

应用程序使用的令牌随后由真正的授权服务器颁发,因此诸如颁发范围和声明、审计、撤销、令牌签名密钥更新等困难的事情都在那里进行管理。配置授权服务器以返回 JWT 访问令牌。此流程通常不返回 ID 令牌或刷新令牌。如果您需要新的访问令牌,请使用新的用户断言调用令牌端点。

先决条件

为此,用户帐户需要存在于授权服务器中。这通常是通过使用授权服务器的 SCIM API 创建用户帐户来完成的。当然,授权服务器需要支持此端到端流程中涉及的标准。

© www.soinside.com 2019 - 2024. All rights reserved.