gpt4 book ai didi

spring-boot - 如何在 Web API 中验证 access_token(Azure AD OAuth 2.0)?

转载 作者:行者123 更新时间:2023-12-04 02:50:19 24 4
gpt4 key购买 nike

我正在为我的 Spring Boot 微服务 + Angular2 应用程序使用 Azure AD OAuth 2.0 授权流。
我的申请流程

  • (从前端向我的 Spring Boot 应用程序发出的第一个请求)Spring Boot 应用程序将其重定向到 Azure 登录页面。
  • 用户输入他的凭据
  • 授权服务器向 redirect_uri 发送 POST 请求, 这个请求有 authorization_code以及其他用户信息(如名字、姓氏和用户 ID)。
  • 然后我得到 bearer token 和 refresh_token使用 authorization_code

  • 现在我要发送 bearer_token到其他将验证 bearer_token 的微服务.

    我的问题是如何验证 bearer_token并在其他微服务中检索该 token 的所有者?

    最佳答案

    我假设您使用返回 JWT 编码 token 的 Azure AD OAuth 2.0 的默认配置。这种类型的 token 几乎没有什么好处——您可以从 token 本身提取信息,例如授予的范围,并且您可以通过检查 token 签名来避免向授权服务器发送验证请求。
    配置 JWT token 验证
    您需要配置资源服务器(您的 Web API)以使用 JWT token :

    @Configuration
    @EnableResourceServer
    public class OAuth2ResourceServerConfig extends ResourceServerConfigurerAdapter {
    @Override
    public void configure(ResourceServerSecurityConfigurer config) {
    config.tokenServices(tokenServices());
    }

    @Bean
    public TokenStore tokenStore() {
    return new JwtTokenStore(accessTokenConverter());
    }

    @Bean
    public JwtAccessTokenConverter accessTokenConverter() {
    JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
    converter.setVerifierKey(obtainAzureADPublicKey());
    return converter;
    }

    @Bean
    @Primary
    public DefaultTokenServices tokenServices() {
    DefaultTokenServices defaultTokenServices = new DefaultTokenServices();
    defaultTokenServices.setTokenStore(tokenStore());
    return defaultTokenServices;
    }
    }
    此代码(稍作修改)取自优秀的 blog post由 Eugen Paraschiv(又名 Baeldung)。
    获取 Azure 签名 key
    您需要获取一个非对称公共(public)加密 key ,Azure AD 使用它来签署已颁发的 token 并从 obtainAzureADPublicKey 返回它。方法。
    基于 documentation您必须首先从 https://login.microsoftonline.com/common/.well-known/openid-configuration 获取有关 JWT 签名 key 端点的元信息(通过从结果中检索 "jwks_uri" 属性的值)。
    然后,您需要从该 URL 获取正确的 key 。
    请注意,Azure AD 会不时更改此信息,因此您不能只在应用程序启动时更改一次。但是,将其缓存至少 24 小时将是一个好主意。

    关于spring-boot - 如何在 Web API 中验证 access_token(Azure AD OAuth 2.0)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45593002/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com