我使用ADFS在Web应用程序中设置登录。
授权请求如下:
ADFS执行授权并重定向到应用程序:
http://ruleman.net/authorize?code=aaaaaaaa.bbbbbbbbb.ccccccccc
有人知道代码参数中的令牌包含用户名等声明。如何解码令牌并提取声明?
答案 0 :(得分:1)
此邮递员流程 - 请参阅Postman : Authorisation Code Grant on Server 2016 - ADFS 4.0。
此代码授权是您所描述的流程。
根据其他答案:
使用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);