当前位置: 首页 > 知识库问答 >
问题:

如何使用Spring-Boot获得OAuth2AccessToken?

谭曦
2023-03-14

我正在使用Spring-Boot和Spring Security,并使用第三方的OAuth2登录名。

SSO提供程序有一个accesstokenendpoint,它返回以下JSON

{
    "access_token": "CGjok",
    "refresh_token": "TSHO6E",
    "scope": "openid profile ",
    "id_token": "eyJ0eXAiOiJKV1QiLCg",
    "token_type": "Bearer",
    "expires_in": 7199,
    "nonce": "ImplicitFlowTest"
}
@EnableOAuth2Sso
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(HttpSecurity http) throws Exception {


        http.authorizeRequests().antMatchers("/restapi/**").hasAuthority("Mitarbeiter")
            .antMatchers("/login", "/static/**", "/", "/actuator/prometheus","/error**","/logout").permitAll()
            .and().logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")).invalidateHttpSession(true)
            .deleteCookies("SMSESSION", "JSESSIONID", "XSRF-TOKEN").logoutSuccessUrl("/");

           http
           // CSRF Token
           .csrf()
               .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());

    }  
/oauth2/connect/endSession?id_token_hint=<oidc-token>&post_logout_redirect_uri=<post-logout-redirect-uri>

引用来自accesstokenendpoint的JSON中的值。我如何访问这些值给定我的设置?

共有1个答案

林德辉
2023-03-14

从安全上下文读取令牌值

        String tokenValue = null;

        final Authentication authenticationObject = SecurityContextHolder.getContext().getAuthentication();
        if (authenticationObject != null) {
            final Object detailObject = authenticationObject.getDetails();
            if (detailObject instanceof OAuth2AuthenticationDetails) {
                final OAuth2AuthenticationDetails details = (OAuth2AuthenticationDetails) detailObject;
                tokenValue = details.getTokenValue();
            } else if (detailObject instanceof OAuth2AccessToken) {
                final OAuth2AccessToken token = (OAuth2AccessToken) detailObject;
                tokenValue = token.getValue();
            } else {
                tokenValue = null;
            }

        }
 类似资料:
  • iam无法在运行应用程序时检索到swagger ui,http://localhost:8080/Swagger-ui.html,有人能说出原因吗?

  • 如何使用Gradle下载mybatis-spring?因为当我使用“”时,我得到了message下面的message。 这是我的文件。

  • 再次明确地说,访问是通过Azure B2C进行的。这显然是一个很大的区别,因为有两种不同的方式访问它。 我遵循以下指南:https://docs.microsoft.com/en-us/azure/java/spring-framework/configure-spring-boot-starter-java-app-with-azure-active-directory-b2c-oidc 我以前

  • 我是新来spring boot的,当我从Postman那里获得RestController中的JSON时,我遇到了一个小问题。 当我从Postmat发送带有属性的请求时,RequestBody中总是为null。 这是我的Rest控制器 我的请求是这样的: 我用邮递员把这些属性 我试图将第一个字符设置为小写,但它不起作用。 这是提出的例外情况: 提前谢谢大家。

  • 我有一个基于aspectj的通用java代理,它在几个spring boot应用程序(和几个spring boot版本)上运行。我试图找到一种在运行时获取端口的方法,在应用程序启动时(在发出请求之前)以编程方式获取端口。问题是- > 我无法使用常规方式获取Spring Boot端口,如https://stackoverflow.com/questions/30312058/spring-boot-

  • 基于线程:Spring Data JPA-结果中带有多个聚合函数的自定义查询 我的jpa存储库中有这个查询 并且在我的pojo构造函数中是: 但我有这个错误: 创建名为“Averages Repository”的bean时出错:调用init方法失败;嵌套异常为java.lang.IllegalArgumentException:对方法public abstract mx.com.sk.pojos.