在我的后端服务器中,是否可以使用第三方 (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 中是否有我误解的服务实际上具有此功能?如果没有,还有其他服务可以帮助我吗?
用户断言
代表用户做某事的最标准的解决方案。根据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 创建用户帐户来完成的。当然,授权服务器需要支持此端到端流程中涉及的标准。