我们的堆栈使用主干作为客户端应用程序,使用Spring Boot作为RESTful API。
我们尝试使用OAuth2进行基本身份验证,用户提供用户名和密码。
我们使用Spring Security进行身份验证,使用jQuery$. ajax方法进行请求。但是,在我们甚至可以使用带有我们的秘密的POST标头进行授权之前,我们得到的响应是预飞行OPTIONS请求的401(未授权)状态。但是,我们可以毫无问题地发布或获取任何其他资源。OPTIONS请求的服务器响应为200(确定),然后它会跟进POST请求。
那么,为什么 /oauth/token401状态的响应会发出OPTIONS请求,即使它不应该这样做呢?它不会让我们授权自己,因为它卡在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
}
[...]
}
我可以从理论上回答你的问题:
那么,为什么 /oauth/token401状态的响应会发出OPTIONS请求,即使它不应该这样做呢?它不会让我们授权自己,因为它卡在OPTIONS请求中,我们无法在其中添加授权标头。
这是因为AuthServer的默认配置是只允许令牌endpoint上经过完全身份验证的请求。
在您的资源服务器中,您允许所有请求在没有身份验证的情况下发生:http.authorizeRequests(). anyRequest(). permitAll();
我试图解决这种情况,就像这里提到的,但我不能让它为我工作。
为了完整起见,我在这里还提到,您必须添加一个CorsFilter,以将正确的头添加到选项飞行前请求中。
我也问了一个非常相似的问题,所以如果我的问题得到了回答,你也许也能用这些信息解决你的问题。
问题内容: 似乎只有在ajax请求能够从服务器获得某些响应时,才会触发成功,错误和完整的回调。 因此,如果我关闭服务器,则不会执行以下错误回调,并且请求将以静默方式失败。 当根本无法访问服务器时,抛出错误的最佳方法是什么。 编辑-从我尝试过的内容来看,似乎jQuery的内置错误处理不适用于JSONP或dataType:“ script”。因此,我将尝试设置手动超时。 编辑-做了一些进一步的研究,看
问题内容: 我正在尝试为我的角度应用程序启用oauth2令牌获取。我的配置运行正常(身份验证对于所有请求均正常运行,令牌提取也正常运行),但是有一个问题。 CORS请求要求在将GET OPTIONS请求发送到服务器之前。更糟糕的是,该请求不包含任何身份验证标头。我希望此请求始终返回200状态,而无需在服务器上进行任何身份验证。可能吗?也许我想念一些东西 我的Spring安全配置: angular
我使用的服务器在HTTP状态消息中返回错误消息。例如,它将返回“400个用户已经存在”,而不是“400个错误请求”。 我想访问Alamofire调用的响应方法中的字符串“用户已经存在”。但是,我找不到任何方法来访问这个字符串。 我已经在StackOverflow上发现了这个问题:Swift Alamofire:如何获取HTTP响应状态代码 不幸的是,没有人回答这个问题。:( 以下是Chrome显示
应用程序需要谷歌刷新令牌,我尝试调用基于谷歌OAuth2文档的服务。 https://developers.google.com/identity/protocols/oauth2installedApp 步骤5:交换刷新和访问令牌的授权代码 “java.io.FileNotFoundException:https://www.googleapis.com/oauth2/v4/token” 使用服
本文向大家介绍请求时token过期自动刷新token操作,包括了请求时token过期自动刷新token操作的使用技巧和注意事项,需要的朋友参考一下 1.在开发过程中,我们都会接触到token,token的作用是什么呢?主要的作用就是为了安全,用户登陆时,服务器会随机生成一个有时效性的token,用户的每一次请求都需要携带上token,证明其请求的合法性,服务器会验证token,只有通过验证才会返回
imi 框架内置了一个 OptionsMiddleware 中间件,用于解决使用 application/json 请求时,浏览器会先发送一个 OPTIONS 请求。并且可以解决跨域头问题。 类名:\Imi\Server\Http\Middleware\OptionsMiddleware 别名:OptionsMiddleware 中间件使用方法:https://doc.imiphp.com/com