代码之家  ›  专栏  ›  技术社区  ›  Artemoon

如何在@Controller中提取身份验证令牌

  •  8
  • Artemoon  · 技术社区  · 7 年前

    我有一个使用OAuth 2.0和授权服务器的Spring Boot应用程序。当我尝试访问安全页面时,我会重定向到授权服务器(Blitz Identity Provider)的登录页面,一切正常。

    我的问题是 我无法在中提取授权令牌 @Controller (在安全页面上)

    • 尝试 this thing 但正如你所见,这是用户名和密码的硬代码 参数,这就像登录,我不需要登录 第二次(在已验证页面上)。
    • 试图输出 身份验证。getDetails() ,显示令牌类型 和令牌一样 < ,但这还不够。
    • 试图在请求-响应标头中查找令牌,但未找到 它,所以授权服务器不会在标头中发送它。

    这里有两个文件可以帮助你理解我的部分内容。

    应用yml公司

    server:
      port: 8080
      context-path: /
      session:
        cookie:
          name:FIRSTSESSION
    security:
      basic:
        enabled: false
      oauth2:
        client:
          clientId: test_id
          clientSecret: f3M5m9a2Dn0v15l
          accessTokenUri: http://server:9000/blitz/oauth/te
          userAuthorizationUri: http://server:9000/blitz/oauth/ae?scope=test_scope
        resource:
          userInfoUri: http://server:9000/blitz/oauth/me
    logging:
      level:
        org.springframework.security: DEBUG
    

    SSO控制器。Java语言

    @EnableOAuth2Sso
    @Controller
    public class SsoController {
    
        @RequestMapping("/secondService")
        public String getContent(HttpServletRequest request, Model model) {
    
            Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
            model.addAttribute("submittedValue", authentication.getDetails());
            return "secondService";
        } 
    }
    

    1 回复  |  直到 2 年前
        1
  •  7
  •   lanoxx    2 年前

    如果已配置oauth2授权/资源服务器,则可以尝试以下代码:

    @Autowired
    private TokenStore tokenStore;
    
    @RequestMapping(method = { RequestMethod.POST, RequestMethod.GET },
                    value = "/oauth/me")
    public Map<String, Object> userInfo (OAuth2Authentication auth)
    {
        final OAuth2AuthenticationDetails details = 
            (OAuth2AuthenticationDetails) auth.getDetails();
    
        //token
        String accessToken = details.getTokenValue();
    
        //reference
        final OAuth2AccessToken accessToken = 
            tokenStore.readAccessToken(details.getTokenValue());
    
       // clientid
        String clientId = auth.getOAuth2Request().getClientId();
    }
    

    希望有帮助!