我们希望用oauth保护服务器到服务器的通信,但授权需要是用户。 (因为主服务器维护会话并执行一些非弹簧角色检查的用户权限验证。)
起初我想到了client_credencials,但我需要在clientid和user之间进行一些映射。这种需要在服务器上进行隐藏登录才能初始化用户会话。 这也不是推荐的流程(如SpringCredentialsTokenEndpointFilter代码所示)
所以我想我想尝试一种不同的方法,比如authrization_code,但我不想在这里有任何重定向。我想要一些简单的东西。
我怎样才能做到这一点? 感谢
施洛米
答案 0 :(得分:1)
您可以将JWT从服务器发送到标识用户的远程服务器,远程服务器可以将其用作“授权”以从服务器获取访问令牌。这称为JWT授权授权。规范(正在进行的工作)在这里:https://tools.ietf.org/html/draft-ietf-oauth-jwt-bearer-12但是已经有很多实现。下面是一个示例JSON对象,可以对其进行编码以生成JWT的JWT声明对象:
{
"iss":"https://jwt-idp.example.com",
"sub":"mailto:mike@example.com",
"aud":"https://jwt-rp.example.net",
"nbf":1300815780,
"exp":1300819380,
"http://claims.example.com/member":true
}
为了向JWT提供前面示例中显示的声明和标头作为访问令牌请求的一部分,例如,客户端可能会发出以下HTTPS请求(仅用于显示目的的额外换行符):
POST /token.oauth2 HTTP/1.1
Host: authz.example.net
Content-Type: application/x-www-form-urlencoded
grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer
&assertion=eyJhbGciOiJFUzI1NiJ9.
eyJpc3Mi[...omitted for brevity...].
J9l-ZhwP[...omitted for brevity...]
当然,双方的实现都需要支持这种授权类型,但是将其添加到现有的OAuth 2.0实现中应该太难了,因为它重用了其他授权类型的大部分内容。