我們的堆棧使用Backbone作爲我們的客戶端應用程序,Spring Boot作爲RESTful API。OAuth2 - 檢索TOKEN時OPTIONS請求上的狀態401
我們正在嘗試使用OAuth2進行基本身份驗證,並提供用戶名和密碼。
我們使用Spring Security進行身份驗證,並使用jQuery $ .ajax方法進行請求。然而,我們得到的響應是在預檢OPTIONS請求時的401(未授權)狀態,然後我們甚至可以將POST標題與我們的祕密進行授權。 但是,我們可以POST或GET任何其他資源沒有任何問題。 OPTIONS請求的服務器響應是200(ok),然後它跟隨POST請求。
那麼,爲什麼從/ oauth /令牌響應的選項請求與401狀態,即使它不應該?它不會讓我們授權我們自己,因爲它卡在OPTIONS請求中,我們無法添加授權標頭。
這就是我們如何處理在前端的請求:
$.ajax({
url: "http://localhost:8080/oauth/token",
type: "POST",
beforeSend: function(xhr) {
xhr.setRequestHeader("Authorization", "Basic Y2xpZW50YXBwOjEyMzQ1Ng==");
},
data: {
password: "qwerty",
username: "jkowalski",
grant_type: "password"
}
});
這是我們的OAuth2配置:
@Configuration
public class OAuth2ServerConfiguration {
private static final String RESOURCE_ID = "restservice";
@Configuration
@EnableResourceServer
protected static class ResourceServerConfiguration extends
ResourceServerConfigurerAdapter {
[...]
@Override
public void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http
.authorizeRequests()
.anyRequest().permitAll();
}
}
[...]
@Configuration
@EnableAuthorizationServer
protected static class OAuth2AuthorizationConfig extends
AuthorizationServerConfigurerAdapter {
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
// @formatter:off
clients
.inMemory()
.withClient("clientapp")
.authorizedGrantTypes("password", "refresh_token")
.authorities("USER","ADMIN")
.scopes("read", "write")
.resourceIds(RESOURCE_ID)
.secret("123456");
// @formatter:on
}
[...]
}
解決了我的問題,這也應該適合你!結帳我的CorsFilter:http://stackoverflow.com/a/30638914/1874049 –