用于自定义声明的 OKTA 授权服务器“命名空间”
OKTA Authorization Server ‘namespace’ for custom claims
我有一个授权服务器,它很乐意根据需要返回各种“开箱即用”和自定义声明,这很棒。
后端(DGraph GraphQL 托管服务器 https://slash.dgraph.io/)需要一个“命名空间”来表示我希望它使用的声明,但我的令牌中的所有声明都位于有效负载的根部。
我来自 Okta 的示例 JWT 负载是:
{
"sub": "xxxxxxxxxxxxxxxxxxx",
"ver": 1,
"iss": "https://abc-1234567.okta.com/oauth2/default",
"aud": "xxxxxxxxxxxxxxxxxxx",
"iat": 1609590699,
"exp": 1609594299,
"jti": "ID.xxxxxxxxxxxxxxxxxxx",
"amr": [
"pwd"
],
"idp": "xxxxxxxxxxxxxxxxxxx",
"nonce": "nonce",
"auth_time": 1000,
"CustomClaim1": "xxxxxxxxxxxxxxxxxxx",
"CustomClaim2": "xxxxxxxxxxxxxxxxxxx"
}
DGraph 想要的是……
{
"sub": "xxxxxxxxxxxxxxxxxxx",
"ver": 1,
"iss": "https://abc-1234567.okta.com/oauth2/default",
"aud": "xxxxxxxxxxxxxxxxxxx",
"iat": 1609590699,
"exp": 1609594299,
"jti": "ID.xxxxxxxxxxxxxxxxxxx",
"amr": [
"pwd"
],
"idp": "xxxxxxxxxxxxxxxxxxx",
"nonce": "nonce",
"auth_time": 1000,
"Namespace": {
"CustomClaim1": "xxxxxxxxxxxxxxxxxxx",
"CustomClaim2": "xxxxxxxxxxxxxxxxxxx"
}
}
我只是在写这篇文章时注意到地址范围创建了一个输出,其中实际上有一个带有声明的命名空间,这就是我所追求的
"address": {
"street_address": "My House",
"locality": "My Town",
"region": "My County",
"postal_code": "My Postcode"
}"
如何做到这一点?!?!
您需要将命名空间创建为授权服务器中的一个声明,然后将命名空间中的每个声明添加到 {} 中该声明的值内,就好像您正在编写 JSON 一样。
复制粘贴简单性的价值{"one":"one", "two":"two", "username": appuser.userName}
expression language 仍将被评估,因此您可以像往常一样使用用户个人资料中的条件和值。
我有一个授权服务器,它很乐意根据需要返回各种“开箱即用”和自定义声明,这很棒。
后端(DGraph GraphQL 托管服务器 https://slash.dgraph.io/)需要一个“命名空间”来表示我希望它使用的声明,但我的令牌中的所有声明都位于有效负载的根部。
我来自 Okta 的示例 JWT 负载是:
{
"sub": "xxxxxxxxxxxxxxxxxxx",
"ver": 1,
"iss": "https://abc-1234567.okta.com/oauth2/default",
"aud": "xxxxxxxxxxxxxxxxxxx",
"iat": 1609590699,
"exp": 1609594299,
"jti": "ID.xxxxxxxxxxxxxxxxxxx",
"amr": [
"pwd"
],
"idp": "xxxxxxxxxxxxxxxxxxx",
"nonce": "nonce",
"auth_time": 1000,
"CustomClaim1": "xxxxxxxxxxxxxxxxxxx",
"CustomClaim2": "xxxxxxxxxxxxxxxxxxx"
}
DGraph 想要的是……
{
"sub": "xxxxxxxxxxxxxxxxxxx",
"ver": 1,
"iss": "https://abc-1234567.okta.com/oauth2/default",
"aud": "xxxxxxxxxxxxxxxxxxx",
"iat": 1609590699,
"exp": 1609594299,
"jti": "ID.xxxxxxxxxxxxxxxxxxx",
"amr": [
"pwd"
],
"idp": "xxxxxxxxxxxxxxxxxxx",
"nonce": "nonce",
"auth_time": 1000,
"Namespace": {
"CustomClaim1": "xxxxxxxxxxxxxxxxxxx",
"CustomClaim2": "xxxxxxxxxxxxxxxxxxx"
}
}
我只是在写这篇文章时注意到地址范围创建了一个输出,其中实际上有一个带有声明的命名空间,这就是我所追求的
"address": {
"street_address": "My House",
"locality": "My Town",
"region": "My County",
"postal_code": "My Postcode"
}"
如何做到这一点?!?!
您需要将命名空间创建为授权服务器中的一个声明,然后将命名空间中的每个声明添加到 {} 中该声明的值内,就好像您正在编写 JSON 一样。
复制粘贴简单性的价值{"one":"one", "two":"two", "username": appuser.userName}
expression language 仍将被评估,因此您可以像往常一样使用用户个人资料中的条件和值。