java - adfs (oauth2) token 验证方法?

标签 java oauth-2.0 jwt adfs windows-server-2012-r2

我为 OAuth2 设置了 ADFS3.0,我终于在我的客户端应用程序上获得了“访问 token ”。

像这样的东西:

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{ 
    "access_token":"<access_token>",
    "token_type":"bearer",
    "expires_in":3600
}

token 由 header 部分、有效负载和签名组成。

现在我将带有 token 的请求发送到我的资源服务器。我想根据 ADFS(Auth 服务器和 IDP)验证来 self 的资源服务器的 token 。

这是我在 adfs 上的证书:

CertificateType : Token-Signing
IsPrimary       : True
StoreLocation   : CurrentUser
StoreName       : My
Thumbprint      : xyz

如何做到这一点?

更新: 关于 token 的一些信息:

标题:

{
  "typ": "JWT",
  "alg": "RS256",
  "x5t": "abc"
}

有效载荷:

{
  "aud": "https://serverurl",
  "iss": "http://.../adfs/services/trust",
  "iat": 1473063317,
  "exp": 1473066917,
  "auth_time": "2016-09-05T08:15:17.875Z",
  "authmethod":     "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport",
  "ver": "1.0",
  "appid": "some-uid"
}

签名:

{
  RSASHA256(
    base64UrlEncode(header) + "." +
    base64UrlEncode(payload),
    Ceritifate/secret
} 

计划的授权授予流程(简短版本无授权代码详细信息):

我们有自己的客户端应用程序(发行者),它从 ADFS (auth + idp) 请求 token ,然后将 token +请求发送到资源服务器,然后资源服务器应该针对 ADFS 验证 token 。如果签名/ token 有效,我缺少的是来自 ADFS 的某个端点。 Thers 在 ADFS 服务器上有一个/adfs/oauth2 端点(我也从那里获得了访问权限),但是微软缺少文档......

最佳答案

您想验证签名。

如果是,请参阅 OAuth2 : Verifying the Azure AD JWT signature .

基本上使用“well-known/openid-configuration”来获取“common/discovery/keys”,然后从中构建证书。

关于java - adfs (oauth2) token 验证方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39332947/

相关文章:

java - 数字与 long 相乘时,输出如何变化?

java - 允许特殊字符的正则表达式

security - 微服务身份验证最佳实践和安全性(OAuth 2.0 和 OpenIdConnect)

php - Paypal REST Oauth 给出重定向错误

jwt - OpenID 连接用例

java - 如何在没有 secret 的情况下检查 JWT token 过期时间?

java - 如何抑制所有初始化错误

java - SpringMVC : populating values of a dropdown of a department object injected inside Employee object

google-app-engine - IdentityServer4 - 'sub' 声明丢失

javascript - 使用客户端指纹对 JWT token 进行编码?