Spring Oauth2 CORS问题

时间:2016-03-14 10:31:44

标签: java spring-mvc oauth-2.0 cors spring-security-oauth2

我将CORS设置为允许少量自定义标头。以下是响应标题 -

  

响应标题{“日期”:“星期一,2016年3月14日10:11:59 GMT”,
  “Server”:“Apache-Coyote / 1.1”,“Transfer-Encoding”:“chunked”,
  “Access-Control-Max-Age”:“3600”,“访问控制允许 - 方法”:   “POST,GET,OPTIONS,DELETE,PUT”,“Content-Type”:   “application / json”,“Access-Control-Allow-Origin”:   “*”,
  “Access-Control-Allow-Credentials”:“true”,
  “Access-Control-Allow-Headers”:“X-Requested-With,Authorization,   Content-Type,Authorization_Code,User_Credentials,   Client_Credentials“}

上面的响应标头应该表示可以使用以下标头从所有来源使用API​​:Authorization, Content-Type, Authorization_Code, User_Credentials, Client_Credentials

我可以传递所有标头并使用来自所有来源的API。

问题 -

不允许使用授权API的请求。授权是一个标头,用于传递Oauth令牌,如{ - 1}}(承载令牌)。

  

corsclient.js:609选项http://54.200.113.97:8080/supafit-api/users   sendRequest @ corsclient.js:609(匿名函数)@   corsclient.js:647b.event.dispatch @jquery-1.9.1.min.js:3v.handle @   的jquery-1.9.1.min.js:3   /客户端#client_method = GET&安培; client_credentials =假安培; client_headers = Authoriz ... nable =真安培; server_status = 200安培; server_credentials =假安培; server_tabs =远程:1   XMLHttpRequest无法加载   http://54.200.113.97:8080/supafit-api/users。对预检的反应   请求未通过访问控制检查:否   请求中存在“Access-Control-Allow-Origin”标头   资源。原因'http://client.cors-api.appspot.com'因此不是   允许访问。响应的HTTP状态代码为401。

修改

以下是该API的Rest Client测试 -

响应标题 -

Authorizatio = Bearer ct45tg4g3rf3rfr5freg34gerfgr3gf

JSON响应正文 -

  

{“id”:78,“userId”:“3465434567”,“coachId”:null,
  “name”:“XDCDSC”,“dob”:null,“email”:“puneetpandey37@gmail.com”,   “IMAGEURL”: “https://lh5.googleusercontent.com/-TcTQeitAvag/AAAAAAAAAAI/AAA/4pamurzO1a4/photo.jpg”,   “gender”:null,“userPhysic”:null,“userTypeId”:1,
  “dietitanId”:null,“alternateEmailId”:null,
  “yearsOfExperience”:null,“lastExperience”:null,
  “languagesKnown”:null,“aboutYourself”:null,
  “coreCompetence”:null,“fieldOfWork”:null,“userAddresses”:[
        {
           “ID”:1,            “用户id”:78,            “locationId”:1,            “地址”: “EC”,            “地标”:“近BN”,            “phoneNumber的”:空,            “地址类型”:“家”         }],“phoneNumbers”:[

     

]}

1 个答案:

答案 0 :(得分:1)

  

响应的HTTP状态代码为401。

您的服务器需要Preflight Request的身份验证,但客户端会删除凭据,CORS specification说:

  

否则,请执行预检请求。使用引用来源作为覆盖引荐来源并使用手动重定向标记块cookie标记集来从 origin 源来源获取请求URL ,使用方法OPTIONS,并使用以下附加约束:

     

在请求方法中包含一个Access-Control-Request-Method标头作为标题字段值(即使这是一个简单的方法)。

     

如果作者请求标题不为空,则包含带有标题字段值的Access-Control-Request-Headers标题,以字典顺序排列作者请求标题中的标题字段名称的逗号分隔列表,每个标题都转换为ASCII小写(即使是一个或更多是一个简单的标题)。

     
      
  • 排除作者请求标题。

  •   
  • 排除用户凭据。

  •   
  • 排除请求实体正文。

  •   

您必须更改服务器,以允许匿名访问预检请求。