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

Spring Boot2+oauth2:配置令牌的Auth代码交换

夹谷星河
2023-03-14

我已经学习了这篇关于配置OAuth2客户机的Spring引导OAuth2教程。不幸的是,一旦“用户”通过Idp(Okta)进行身份验证,就会发生带有“代码”的重定向,这将导致一个重定向循环:/login->/authorize······->/登录...->/login

Firefox检测到服务器正在以一种永远无法完成的方式重定向对此地址的请求。

okta:
  oauth2:
    client:
      client-id: clientId
      client-secret: clientSecret
      scope: openid profile email
      client-authentication-scheme: form
      access-token-uri: https://mydomain.oktapreview.com/oauth2/myapp/v1/token
      user-authorization-uri: https://mydomain.oktapreview.com/oauth2/myapp/v1/authorize
    resource:
      user-info-uri: https://mydomain.oktapreview.com/oauth2/myapp/v1/userinfo
  private Filter filter() {
    OAuth2ClientAuthenticationProcessingFilter filter = new OAuth2ClientAuthenticationProcessingFilter(
        "/login");
    OAuth2RestTemplate restTemplate = new OAuth2RestTemplate(oktaClient(), oauth2ClientContext);
    filter.setRestTemplate(restTemplate);
    UserInfoTokenServices tokenServices = new UserInfoTokenServices(oktaResource().getUserInfoUri(),
        oktaClient().getClientId());
    tokenServices.setRestTemplate(restTemplate);
    filter.setTokenServices(tokenServices);

    return filter;
  }
  @Configuration
  @EnableOAuth2Client
  public class WebSecConfig extends WebSecurityConfigurerAdapter {
  ....
  @Override
  public void configure(HttpSecurity http) throws Exception {
    http.antMatcher("/**").authorizeRequests()
        .antMatchers("/", "/login**", "/logout**", "/v2/api-docs", "/configuration/ui",
            "/configuration/security", "/swagger-resources/**", "/swagger-ui.html", "/webjars/**")
        .permitAll()
        .anyRequest().authenticated().and().exceptionHandling()
        .authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/login")).and().csrf()
        .csrfTokenRepository(
            CookieCsrfTokenRepository.withHttpOnlyFalse()).and().addFilterBefore(filter(),
        BasicAuthenticationFilter.class);
  }
  ....
  }

更新:解决方案是将LoginurlAuthenticationEntryPoint(“/login”)更改为LoginurlAuthenticationEntryPoint(“/”)并重新创建授权服务器。

共有1个答案

终弘厚
2023-03-14

您应该使用默认授权服务器或您创建的授权服务器。如果使用默认值,它应该如下所示:

https://mydomain.oktapreview.com/oauth2/default
 类似资料:
  • 我想我获得了使用授权代码授予类型的OAuth2流。资源所有者登录到服务器,然后使用授权代码重定向到客户端。然后客户端使用授权代码向授权服务器查询访问令牌和刷新令牌。这就是我困惑的地方。 当访问令牌过期时,客户端应该使用授权码还是刷新令牌来获取新的访问令牌?如果您有授权代码,为什么要使用刷新令牌? 注:我并不是在找一个回答说“刷新令牌是可选的”,因为我正在为amazon-alexa编写这个服务器,这

  • 我对oauth2中的刷新令牌有点困惑。如它所说的访问令牌限制了黑客可以使用用户凭证的1小时的时间窗口,刷新令牌是万岁令牌,可以用来重新创建访问令牌。 我很困惑,如果有人从cookie中窃取了访问令牌,他也可以窃取刷新令牌,并可以使用刷新令牌创建新的访问令牌,因为我在JQuery中有ajax请求(客户端)

  • 我有一个关于spring-security-oauth2 2.0.7配置的问题。我正在通过GlobalAuthenticationConfigurerAdapter使用LDAP进行身份验证: 虽然refresh令牌在spring-security-oauth2的2.0.6版中运行良好,但在2.0.7版中就不再运行了。正如这里所读的,应该设置以便在刷新期间尝试获取新的访问令牌时使用。 据我理解,这与

  • 我已经在Oauth2框架中实现了JWT令牌。在实现之后,我想到的查询很少,如下所示: 1.在实现JWT之前,每当用户以相应的访问令牌作为载体访问资源服务器中的API,资源服务器就使用user-info-uriendpoint与auth服务器进行检查,如下所示 在JWT实现之后,我认为资源服务器和auth服务器之间不会发生检查调用,而是使用公钥验证JWT令牌的签名。但是,在获得JWT令牌之后,为了检

  • 我正在使用Azure AD为API提供OAuth2身份验证。设置 Ex:此调用返回AADSTS90014:请求正文必须包含以下参数:'grant_type': https://login.microsoftonline.com/mytennant/oauth2/token?grant_type=客户端凭据 但是,在正文中添加与表单数据相同的参数的帖子就可以了。我认为Oauth应该支持参数化调用(如

  • 我正在创建一个小的YouTube Analytics API脚本,我一直在尝试用用户授权码交换访问令牌。 我已经设法获得了授权令牌,但是我不知道如何“向Google提交POST请求”。 我认为这是可行的: 但我不知道在条件之间放什么才能真正交换代码。当我访问该位置时 https://accounts.google.com/o/oauth2/code={代码} 我得到一个未知的URL。