【问题标题】:Are there any endpoint for check token in ADFS?ADFS 中是否有任何用于检查令牌的端点?
【发布时间】:2020-01-09 11:19:14
【问题描述】:

出于安全目的,我使用 Spring Oauth2 和 ADFS。但是,我无法从 ADFS 的响应中找到用于检查令牌的端点。

我还有用 Java 编写的 Spring Authorization Provider。我的应用程序使用这些属性调用它:

security.oauth2.client.clientId=myclient
security.oauth2.client.client-secret= mysecret
security.oauth2.client.userAuthorizationUri= http://127.0.0.1:9999/oauth/authorize?resource=https://localhost:8443/login
security.oauth2.client.accessTokenUri= http://127.0.0.1:9999/oauth/token
security.oauth2.resource.user-info-uri= http://127.0.0.1:9999/login
security.oauth2.resource.token-info-uri= http://127.0.0.1:9999/oauth/check_token
security.oauth2.client.tokenName=code
security.oauth2.client.authenticationScheme=query
security.oauth2.client.clientAuthenticationScheme=form
security.oauth2.client.grant-type=authorization_code

我已经更改了属性的值以与 ADFS 连接

security.oauth2.client.clientId=myclient
security.oauth2.client.client-secret= myclient
security.oauth2.client.userAuthorizationUri= https://adfs.local/adfs/oauth2/authorize?resource=https://localhost:8443/login
security.oauth2.client.accessTokenUri= https://adfs.local/adfs/oauth2/token
security.oauth2.resource.user-info-uri= https://adfs.local/adfs/oauth2/userinfo
security.oauth2.resource.token-info-uri= https://adfs.local/adfs/oauth2/check_token
security.oauth2.client.tokenName=code
security.oauth2.client.authenticationScheme=query
security.oauth2.client.clientAuthenticationScheme=form
security.oauth2.client.grant-type=authorization_code

但是,我发现 https://adfs.local/adfs/oauth2/check_token 在 ADFS 中无效。

如何在 ADFS 中获取 check_token? check_token 是令牌自省端点,但是,根据 OAuth 2 扩展,此端点不会返回节点“活动”,这是强制性的。看到这个link 这是 Spring Authorization Provider 在返回 check_token 端点时所做的事情

@RequestMapping(value = "/oauth/check_token", method = RequestMethod.POST)
@ResponseBody
public Map<String, ?> checkToken(@RequestParam("token") String value) {

    OAuth2AccessToken token = resourceServerTokenServices.readAccessToken(value);
    if (token == null) {
        throw new InvalidTokenException("Token was not recognised");
    }

    if (token.isExpired()) {
        throw new InvalidTokenException("Token has expired");
    }

    OAuth2Authentication authentication = resourceServerTokenServices.loadAuthentication(token.getValue());

    Map<String, Object> response = (Map<String, Object>)accessTokenConverter.convertAccessToken(token, authentication);

    // gh-1070
    response.put("active", true);   // Always true if token exists and not expired

    return response;
}

【问题讨论】:

    标签: spring adfs spring-oauth2


    【解决方案1】:

    ADFS 没有这样的端点,我不相信它是规范的一部分?

    你可以使用:

    https://[YourADFS 主机名]/adfs/.well-known/openid-configuration

    获取密钥以自己检查 JWT,这是通常的做法。

    有很多关于如何检查 JWT 的资源,例如this

    【讨论】:

    • 我正在寻找令牌自省端点,但是,根据 OAuth 2 扩展,此端点不会返回节点“活动”,这是强制性的。您可以从我帖子中的链接获取一些信息
    • stackoverflow.com/questions/47783648/… 你可以访问这里了解我对 check_token 的意思
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-20
    • 2017-08-22
    • 2019-11-09
    相关资源
    最近更新 更多