OAuth 2.0と認証サーバーを使用するSpring Bootアプリがあります。保護されたページにアクセスしようとすると、認証サーバー(Blitzアイデンティティプロバイダー)のログインページにリダイレクトされました。私の問題は、@ Controller(保護されたページ)で認証トークンを抽出できないことです。このトークンを後で使用して、2番目のアプリケーションで認証します。
これは、私のコンテキストの一部を理解するのに役立つ2つのファイルです。
application.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
SsoController.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";
}
}
それで、あなたは何を提案できますか?この場合、どのように認証トークンを抽出できますか?
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();
}
それが役に立てば幸い!