似乎你沒有聽說過有關簡化與oauth2提供商合作的spring-cloud-security項目。看一看:
http://cloud.spring.io/spring-cloud-security/
有在github上(如上頁的右側)提供樣品。它顯示瞭如何設置以防止只使用一個oauth2提供程序 - 檢查顯示如何爲github執行此操作的項目https://github.com/spring-cloud-samples/sso。你通過配置application.yml
文件+添加@EnableOAuth2Sso
註釋來完成大部分這些工作,以便所有機器啓動。
對於與您的Web應用程序進行「正常」交互,它非常直觀。如果你需要你的應用程序作爲其他人的api工作,那麼你必須保留令牌,將它們添加到請求中。如果你的api客戶端也是你可以更改的代碼,那麼你可以使用OAuth2RestTemplate
類,所以你可以對你的API進行查詢,因爲它是通常的/不安全的端點。
如果需要使用例如兩個不同的供應商爲不同的路徑,然後它更復雜,你必須配置它們都喜歡:
@Bean
public OAuth2RestTemplate facebookOAuth2RestTemplate(OAuth2ClientContext clientContext) {
return new OAuth2RestTemplate(facebookOAuth2ResourceDetails(), clientContext);
}
@Bean
public OAuth2ProtectedResourceDetails facebookOAuth2ResourceDetails() {
AuthorizationCodeResourceDetails resource = new AuthorizationCodeResourceDetails();
resource.setAccessTokenUri(tokenUri);
resource.setId("id");
resource.setUserAuthorizationUri(authorizationUri);
resource.setUseCurrentUri(false);
resource.setPreEstablishedRedirectUri(redirectUri);
resource.setClientId(clientId);
resource.setClientSecret(clientSecret);
resource.setTokenName("tokenname");
resource.setAuthenticationScheme(AuthenticationScheme.query);
resource.setClientAuthenticationScheme(AuthenticationScheme.form);
return resource;
}
,並決定在這種情況下使用哪種OAuth2RestTemplate
實例。
//更新
如果您想通過一些的oauth2提供商可以提供授權用戶交換春季安全核心擴展OAuth2SsoConfigurerAdapter
類:
@Configuration
@EnableOAuth2Sso
public class WebSecurityConfig extends OAuth2SsoConfigurerAdapter {
@Override
public void match(RequestMatchers matchers) {
matchers.antMatchers("/admin");
}
@Override
public void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/admin").hasRole("ADMIN")
.and()
.logout().logoutUrl("/logout").permitAll()
.logoutSuccessUrl("/");
}
所以/管理員現在將保護和用戶重定向到您指定的任何授權服務器。它需要application.yml
中的oauth配置。
spring:
oauth2:
client: # Sauron
clientId: app_clientid
clientSecret: app_secret
accessTokenUri: http://authorizationserver/oauth/token
userAuthorizationUri: http://authorizationserver/oauth/authorize
clientAuthenticationScheme: header
resource:
tokenInfoUri: http://authorizationserver/oauth/check_token
preferTokenInfo: false
這就是爲什麼我之前寫過它只能使用一個auhorization服務器,但如果您需要更多,那麼它更復雜。
謝謝@freakman,我實際上看到了這一點,但不幸的是我不幸回答了我的查詢。可以使用Oauth2來代替標準的彈簧安全性,而不使用restfull調用,即瀏覽器在非restfull方法下進行的正常調用。或者應該將它作爲一個獨立的實體來實現(僅限於api調用)(請注意,我們不會使用第三方授權者,我們希望創建自己的服務器並將其連接到它的 – Aeseir
它可以用來保護您的控制器爲'正常'彈簧安全 - 這個例子顯示了這個:https://github.com/spring-cloud-samples/sso。更新內容。 – freakman