我目前正在实施 OAuth 令牌交换 STS,并且有点挣扎。该标准在https://www.rfc-editor.org/rfc/rfc8693中定义 我的用例涉及由用户(主体)操作触发的系统到系统调用链。我想确保端点级别的授权是由范围和白名单 client_ids 的混合完成的。此外,我想保留客户上下文。
我看到令牌交换方案在这里是有效的。规范给出了一个示例,其中生成的令牌包含被授权访问的参与者。但是,规范将逻辑系统(又名 OAuth 客户端)放入嵌套参与者信息的“子”声明中,如下所示:
{
"aud":"https://service26.example.com",
"iss":"https://issuer.example.com",
"exp":1443904100,
"nbf":1443904000,
"sub":"user@example.com",
"act":
{
"sub":"https://service16.example.com",
"act":
{
"sub":"https://service77.example.com"
}
}
}
我觉得这有点奇怪。如果演员令牌也是个性化令牌(例如“adminuser”),我希望“sub”声明带有实际主题。在我看来,进行令牌交换的系统会将 client_credentials 令牌作为参与者令牌发送。这不包含“sub”声明,而仅包含“cid”(client_id)声明。此声明应包含在生成的令牌的“行为”声明中,因此我希望生成的令牌如下所示:
{
"aud":"https://service26.example.com",
"iss":"https://issuer.example.com",
"exp":1443904100,
"nbf":1443904000,
"sub":"user@example.com",
"cid":"3rd_client_that_conducted_token_exchange",
"act":
{
"cid":"2nd_client_id",
"act":
{
"cid":"initial_client_id"
}
}
}
我不确定“行为”声明是否有必要的结构(据我所知,没有)。这里有最佳实践吗?好奇你的想法!:)