获取401访问权限http://localhost:8080/oauth/token.
getting 401 to access http://localhost:8080/oauth/token
我正在从angularjs客户端应用程序中点击一个端点登录,当我进行该操作时,我在浏览器控制台中收到以下错误
选项http://localhost:8080/oauth/tokenXMLHttpRequest无法加载http://localhost:8080/oauth/token.无效的HTTP状态代码401
它是从客户端接受CORS的服务器端代码。
@Component
public class SimpleCORSFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
chain.doFilter(req, res);
}
public void init(FilterConfig filterConfig) {}
public void destroy() {}
}
它是客户端代码,调用http://localhost:8080/oauth/token
angular.module('frontendApp')
.factory('AuthServerProvider', function loginService($http, localStorageService, Base64, API_SERVER) {
return {
login: function (credentials) {
var data = "username=" + credentials.username + "&password="
+ credentials.password + "&grant_type=password&scope=read%20write&" +
"client_secret=123456&client_id=clientapp";
return $http.post(API_SERVER + 'oauth/token', data, {
headers: {
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "application/json",
"Access-Control-Allow-Origin": "*",
"Authorization": "Basic " + Base64.encode("clientapp" + ':' + "123456")
}
}).success(function (response) {
var expiredAt = new Date();
expiredAt.setSeconds(expiredAt.getSeconds() + response.expires_in);
response.expires_at = expiredAt.getTime();
localStorageService.set('token', response);
return response;
});
},
logout: function () {
// logout from the server
$http.post('api/logout').then(function () {
localStorageService.clearAll();
});
},
getToken: function () {
return localStorageService.get('token');
},
hasValidToken: function () {
var token = this.getToken();
return token && token.expires_at && token.expires_at > new Date().getTime();
}
};
});
在OPTIONS请求的情况下,不应进行进一步处理,即跳过对chain.doFilter(req, res)
的调用,例如:
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
response.addHeader("Access-Control-Allow-Origin", "*");
if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
response.setHeader("Access-Control-Allow-Methods", "POST,GET,DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "content-type,access-control-request-headers,access-control-request-method,accept,origin,authorization,x-requested-with");
response.setStatus(HttpServletResponse.SC_OK);
} else {
chain.doFilter(req, resp);
}
对于Oauth2,您将拥有这个扩展AuthorizationServerConfigurerAdapter
的配置类。在这个类中,你可以添加这个代码
@Configuration
@EnableAuthorizationServer
public static class AuthServerConfiguration extends AuthorizationServerConfigurerAdapter {
@Override
public void configure(AuthorizationServerSecurityConfigurer security) {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.applyPermitDefaultValues();
AuthorizationServerEndpointsConfigurer
source.registerCorsConfiguration("/oauth/token", config);
CorsFilter filter = new CorsFilter(source);
security.addTokenEndpointAuthenticationFilter(filter);
}
}
这将为Oauth 添加cors的配置
相关文章:
- PHP中的setcookie仅适用于localhost
- 在localhost Dev Box上测试JSONP请求的最佳方式
- AJAX简单错误.XMLHttpRequest无法加载http://localhost/mpl/getPage.php.
- 使用Yelp API时出现OAuth错误
- Dropbox oauth认证的IF语句的第二部分是't已触发
- 使用Oauth使用Javascript访问Api
- @Url.Content(“~”)不适用于localhost
- http://oauth.googlecode.com/svn/code/javascript/oauth.js已关闭,
- Instagram oauth flow in angularjs
- Slack Oauth/Authorize API Call
- 如何在谷歌开发者控制台上为firefox扩展创建oAuth项目
- 如何使用Google撤销Oauth令牌'的Javascript API
- OAuth和访问令牌
- Java脚本访问Location标头's OAuth 2的URL片段
- 向localhost发出带有grunt的代理CORS请求
- OAuth 2.0 OpenID连接环回和密钥斗篷
- 使用公共API访问(无OAuth)从JavaScript编写Google电子表格
- Electron的OAuth 2.0客户端机密
- 如何获取登录用户的twitter oAuth令牌
- 获取401访问权限http://localhost:8080/oauth/token.