嗨有效我创建了个人帐户一个MVC SPA的应用程序启用并成功能够获得访问令牌注册过程后的accessToken不跨域API
我也创造了个人账户WEB API项目启用。并在本地主机上托管MVC和API项目。
我试图从保存在我的会话存储承载令牌的MVC应用程序访问API。只要两个项目都在localhost中,它就可以正常工作。我在Azure中托管了API项目,并且如果我尝试使用Web应用程序创建的不记名令牌从本地主机MVC应用程序访问它,API调用将始终返回“未授权”。
示例代码:
MVC应用:
$.ajax({
url: 'https://azureapi/api/getProducts',
headers: {
'Authorization': 'Bearer ' + accesstoken,
'Content-Type': 'application/json; charset=utf-8'
},
type: "POST", /* or type:"GET" or type:"PUT" */
dataType: "json",
data: JSON.stringify(model),
success: function (result) {
},
error: function (e) {
debugger;
console.log(e.responseText);
}
});
API项目:
[Authorize]
[Route("getProducts")]
[HttpPost]
public HttpResponseMessage GetProducts(ProductCriteria model)
{}
在WEB API 启用CORS
// Configure Web API to use only bearer token authentication.
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
var enableCORS = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(enableCORS);
是因为CORS(预检OPTIONS请求未通过)或拒绝请求他们是否拒绝了您的应用程序后端代码(例如访问令牌验证)? –
我没有线索。如果我尝试在fiddler中运行请求,即使我在Auth头文件中传递了有效的不记名令牌,我也会得到“未授权”,如果我在本地主机中同时托管了MVC和API解决方案,那么相同的持票人令牌就可以工作。我是否需要在API的web.config中添加任何设置? – DevExpress
您可能需要确保两个站点共享相同的machineKey。 –