在Java中解析ADFS令牌

时间:2017-09-13 07:48:52

标签: java oauth-2.0 single-sign-on adfs

我使用ADFS在Web应用程序中设置登录。

授权请求如下:

  

https://sso.company.net/adfs/oauth2/authorize?response_type=code&client_id=ruleman&resource=urn:ruleman:1&redirect_uri=http://ruleman.net/authorize

ADFS执行授权并重定向到应用程序:

  

http://ruleman.net/authorize?code=aaaaaaaa.bbbbbbbbb.ccccccccc

有人知道代码参数中的令牌包含用户名等声明。如何解码令牌并提取声明?

2 个答案:

答案 0 :(得分:1)

此邮递员流程 - 请参阅Postman : Authorisation Code Grant on Server 2016 - ADFS 4.0

此代码授权是您所描述的流程。

根据其他答案:

  • 使用授权端点
  • 获取代码
  • 将代码发送到令牌端点
  • 获取JWT

使用jwt.io检查JWT。

答案 1 :(得分:0)

该流程遵循OAuth 2.0标准。请注意我不是ADFS的专家,但我对OAuth 2.0了如指掌。

授权流程包含多个具有不同步骤的选项。在您的情况下,您使用代码配置文件(指定 response_type = code )。您执行的授权步骤只是第一步,需要遵循几个步骤

您可以搜索“带有ADFS的OAuth 2.0”,例如http://blog.scottlogic.com/2015/03/09/OAUTH2-Authentication-with-ADFS-3.0.html

授权请求

  

../授权RESPONSE_TYPE =代码&安培; CLIENT_ID = ruleman       &安培;资源=瓮:ruleman:1和; REDIRECT_URI = http://ruleman.net/authorize

您将收到OAuth代码(通常不会提供任何信息值,它只是代码)

  

http://ruleman.net/authorize?code=aaaaaaaa.bbbbbbbbb.ccccccccc

     

代码参数包含诸如用户名等的声明

这是错误的假设

使用此代码,您需要从后端调用令牌服务以接收访问令牌(例如,使用HttpClient)。

POST /adfs/oauth2/token HTTP/1.1

grant_type=authorization_code&client_id=some-uid-or-
other&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2FgetAToken&code=thecode

您将收到一个访问令牌。此步骤可确保您的应用程序使用它知道的身份提供程序进行身份验证。

根据上面链接的帖子:

  

有趣的是它本身,它实际上是一个JSON Web令牌(JWT)。这就是用户身份和其他资助的签名表示。

我无法确认,但你可以试试。通常(与其他身份提供者一起)令牌只是一个令牌,客户端需要调用“用户信息”服务来获取任何用户身份声明,但似乎ADFS为您提供了一些快捷方式。

然后你可以使用任何JWT库来解码/验证jwt令牌(com.auth0 / java-jwt / 3.0.1)

com.auth0.jwt.interfaces.DecodedJWT jwt = com.auth0.jwt.JWT.decode(token);