Web API oauth 不记名令牌身份验证在 Edge 浏览器中不起作用
Web API oauth bearer token authentication doesn't work in Edge browser
我使用 Web API oauth 不记名令牌认证 + AngularJs from here
它适用于其他浏览器,但在 Microsoft Edge 中不起作用。
在此浏览器中,我从服务器获取令牌,但仍停留在该页面中,
尽管浏览器必须重定向到另一个页面。
我认为当我将令牌数据设置到本地存储时会出现问题。
我是这样做的
if (loginData.useRefreshTokens) {
localStorageService.set('authorizationData', { token: response.access_token, userName: loginData.userName, refreshToken: response.refresh_token, useRefreshTokens: true });
}
else {
localStorageService.set('authorizationData', { token: response.access_token, userName: loginData.userName, refreshToken: "", useRefreshTokens: false });
}
问题是当我对 Web api 方法执行 http get 请求时,该方法通过这种方式检查当前用户是否具有所需的角色
AngularJS
$http({
method: "GET",
url: "api/Models/CheckAccess/"
}).then(function mySucces(response) {
if (response.data === true) {
$location.path(page);
}
else
{
authServiceFactory.logOut();
$location.path("login");
}
});
WebApi 方法
[HttpGet]
public bool CheckAccess()
{
var identity = (ClaimsPrincipal)Thread.CurrentPrincipal;
var userRole = identity.Claims.Where(c => c.Type == ClaimTypes.Role)
.Select(c => c.Value).SingleOrDefault();
if (userRole=="Hauler")
{
return true;
}
else
{
return false;
}
}
在 Edge 浏览器中它总是 return false。我用这种方法解决了这个问题
[HttpGet]
[Authorize(Roles = "Hauler")]
public bool CheckAccess()
{
return true;
}
我使用 Web API oauth 不记名令牌认证 + AngularJs from here 它适用于其他浏览器,但在 Microsoft Edge 中不起作用。 在此浏览器中,我从服务器获取令牌,但仍停留在该页面中, 尽管浏览器必须重定向到另一个页面。 我认为当我将令牌数据设置到本地存储时会出现问题。 我是这样做的
if (loginData.useRefreshTokens) {
localStorageService.set('authorizationData', { token: response.access_token, userName: loginData.userName, refreshToken: response.refresh_token, useRefreshTokens: true });
}
else {
localStorageService.set('authorizationData', { token: response.access_token, userName: loginData.userName, refreshToken: "", useRefreshTokens: false });
}
问题是当我对 Web api 方法执行 http get 请求时,该方法通过这种方式检查当前用户是否具有所需的角色
AngularJS
$http({
method: "GET",
url: "api/Models/CheckAccess/"
}).then(function mySucces(response) {
if (response.data === true) {
$location.path(page);
}
else
{
authServiceFactory.logOut();
$location.path("login");
}
});
WebApi 方法
[HttpGet]
public bool CheckAccess()
{
var identity = (ClaimsPrincipal)Thread.CurrentPrincipal;
var userRole = identity.Claims.Where(c => c.Type == ClaimTypes.Role)
.Select(c => c.Value).SingleOrDefault();
if (userRole=="Hauler")
{
return true;
}
else
{
return false;
}
}
在 Edge 浏览器中它总是 return false。我用这种方法解决了这个问题
[HttpGet]
[Authorize(Roles = "Hauler")]
public bool CheckAccess()
{
return true;
}