首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ForgeRock -无效令牌交换

ForgeRock -无效令牌交换
EN

Stack Overflow用户
提问于 2021-08-26 14:20:53
回答 1查看 198关注 0票数 0

我使用的是ForgeRock v7.1.0,运行在MacOS 11.5.2 (Big )上的Dockerv3.6.0中。

我正在尝试交换一个JWT2.0访问令牌(subject令牌),我已经检索到它是一个ID令牌(带有一个JWT ),每次我调用它时,它都会给我一个错误,特别是我相信它与OAuth参数有关。

我现在采取的步骤如下:

  1. 生成OAuth2访问令牌:

代码语言:javascript
复制
curl --location --request POST 'http://am.example.com:8080/am/oauth2/realms/root/access_token' \
--header 'Authorization: Basic c3RldmU6cGFzc3dvcmQ=' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=password' \
--data-urlencode 'username=user1' \
--data-urlencode 'password=7fYCi0Frhcq5p3gCXGxJ2B' \
--data-urlencode 'scope=cn'

返回以下内容:

代码语言:javascript
复制
{
    "access_token": "BS8vVbJ4EEygzdEE3jQH-xsKW9w",
    "scope": "cn",
    "token_type": "Bearer",
    "expires_in": 3599
}

  1. 回顾返回的令牌以检查其有效性:

代码语言:javascript
复制
curl --location --request POST 'http://am.example.com:8080/am/oauth2/realms/root/introspect?token=BS8vVbJ4EEygzdEE3jQH-xsKW9w' \
--header 'Authorization: Basic c3RldmU6cGFzc3dvcmQ='

返回以下内容:

代码语言:javascript
复制
{
    "active": true,
    "scope": "cn",
    "realm": "/",
    "client_id": "steve",
    "user_id": "user1",
    "token_type": "Bearer",
    "exp": 1629990663,
    "sub": "(usr!user1)",
    "subname": "user1",
    "iss": "http://am.example.com:8080/am/oauth2",
    "auth_level": 0,
    "authGrantId": "whjnenzHCH96TyaxfuefiOcBfm8",
    "auditTrackingId": "4d353b7e-6cd5-4289-884a-39c50396ed0c-116027"
}

现在,当我尝试交换令牌:

时,这就是我得到错误的地方

代码语言:javascript
复制
curl --location --request POST 'http://am.example.com:8080/am/oauth2/realms/root/access_token' \
--header 'Authorization: Basic c3RldmU6cGFzc3dvcmQ=' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=urn:ietf:params:oauth:grant-type:token-exchange' \
--data-urlencode 'subject_token_type=urn:ietf:params:oauth:token-type:access_token' \
--data-urlencode 'subject_token=BS8vVbJ4EEygzdEE3jQH-xsKW9w' \
--data-urlencode 'scope=cn' \
--data-urlencode 'requested_token_type=urn:ietf:params:oauth:token-type:id_token'

这给了我一个错误:

代码语言:javascript
复制
{
    "error_description": "Invalid token exchange.",
    "error": "invalid_request"
}

如果我没有指定subject_token_type,它反而给出了错误:

代码语言:javascript
复制
{
    "error_description": "Subject token type is required.",
    "error": "invalid_request"
}

这让我相信,要么我使用了错误的类型,要么在我的本地ForgeRock实例中没有正确地设置一些东西。

我看过这里描述的错误响应可能性:https://backstage.forgerock.com/docs/am/7.1/oauth2-guide/token-exchange-flows.html,但是它没有那么大的帮助。

任何感激的帮助!谢谢史蒂夫

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-26 14:47:44

哈!总是这样,在发布了一个问题后,你设法解决它!

好吧,这就是我需要做的:

  1. 导航到领域> RealmName >脚本

  1. 修改"OAuth 2.0 5月法案“脚本如下(酌情修改):

代码语言:javascript
复制
import org.forgerock.json.JsonValue

token.setMayAct(
    JsonValue.json(JsonValue.object(
        JsonValue.field("client_id", "steve"), 
        JsonValue.field("sub", "(usr!user1)"))))

  1. 验证并保存更改

  1. 导航到领域> RealmName >服务> OAuth 2.0提供程序

  1. 在"Core“选项卡底部将两个".令牌五月法案脚本”下拉设置为新修改的"OAuth2五月法案“脚本

  1. 重新生成访问令牌并重复令牌Exchange调用,它应该工作正常
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68940329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档