我已经使用ASP.net Identity创建了承载令牌。在AngularJS中,我编写了此函数以获取授权数据。
$scope.GetAuthorizeData = function () {
$http({
method: 'GET',
url: "/api/Values",
headers: { 'authorization': 'bearer <myTokenId>' },
}).success(function (data) {
alert("Authorized :D");
$scope.values = data;
}).error(function () {
alert("Failed :(");
});
};
所以 我想将此令牌存储到浏览器cookie中 。如果此令牌存在,则获取令牌并从IIS服务器获取数据,否则重定向到登录页面以登录以获取新令牌。
同样,如果用户单击注销按钮,则应从浏览器cookie中删除令牌。
这该怎么做 ? 有可能吗?验证和授权用户的正确方法吗?如果有多个用户令牌怎么办?
$cookies
使用该ngCookies
模块的AngularJS API中提供了一项服务 。可以如下使用:
function controller($cookies) {
//set cookie
$cookies.put('token', 'myBearerToken');
//get cookie
var token=$cookies.get('token');
//remove token
$cookies.remove('token');
}
controller.$inject=['$cookies'];
对于您的情况将是:
//inject $cookies into controller
$scope.GetAuthorizeData = function () {
$http({
method: 'GET',
url: "/api/Values",
headers: { 'authorization': 'bearer <myTokenId>' },
})
.success(function (data) {
$cookies.put('token', data);
}).error(function () {
alert("Failed :(");
});
};
您还必须添加angular-cookies模块代码。并将其添加到您的角度应用程序:中angular.module('myApp', ['ngCookies']);
。Angular
Cookies的文档。
我还想建议使用a Http interceptor
,它将为每个请求设置承载头,而不是必须为每个请求手动设置它。
//Create a http interceptor factory
function accessTokenHttpInterceptor($cookies) {
return {
//For each request the interceptor will set the bearer token header.
request: function($config) {
//Fetch token from cookie
var token=$cookies.get['token'];
//set authorization header
$config.headers['Authorization'] = 'Bearer '+token;
return $config;
},
response: function(response) {
//if you get a token back in your response you can use
//the response interceptor to update the token in the
//stored in the cookie
if (response.config.headers.yourTokenProperty) {
//fetch token
var token=response.config.headers.yourTokenProperty;
//set token
$cookies.put('token', token);
}
return response;
}
};
}
accessTokenHttpInterceptor.$inject=['$cookies'];
//Register the http interceptor to angular config.
function httpInterceptorRegistry($httpProvider) {
$httpProvider.interceptors.push('accessTokenHttpInterceptor');
}
httpInterceptorRegistry.$inject=['$httpProvider'];
//Assign to module
angular
.module('myApp')
.config(httpInterceptorRegistry)
.factory('accessTokenHttpInterceptor', accessTokenHttpInterceptor)
有了http interceptor
适当的位置后,您无需Authorization header
为每个请求设置。
function service($http) {
this.fetchToken=function() {
//Authorization header will be set before sending request.
return $http
.get("/api/some/endpoint")
.success(function(data) {
console.log(data);
return data;
})
}
}
service.$inject=['$http']
正如鲍里斯(Boris)所说:还有其他解决方法。您也可以localStorage
用来存储令牌。这也可以与http拦截器一起使用。只需将实现从cookie更改为localStorage。
function controller($window) {
//set token
$window.localStorage['jwt']="myToken";
//get token
var token=$window.localStorage['jwt'];
}
controller.$inject=['$window'];
我已经使用ASP.NET标识创建了承载令牌。在AngularJS中,我编写了这个函数来获取授权数据。 所以我想把这个令牌存储到浏览器cookie中。如果该令牌存在于此,则获取该令牌并从IIS服务器获取数据,否则重定向到登录页以登录获取新令牌。 类似地,如果用户单击注销按钮,它应该从浏览器cookie中删除令牌。 这怎么做?有可能吗?对用户进行身份验证和授权是正确的方式吗?如果有多个用户令牌怎么办?
在本教程之后,我解决了这个问题。 如何阻止浏览器身份验证对话框?你能帮帮我吗?
问题内容: 有谁知道在自动化过程中使用Selenium或任何其他工具来处理浏览器身份验证吗? 问题答案: 警报方法authenticateUsing() 使您可以跳过“ Http基本身份验证”框。 从Selenium 3.4开始,它仍处于测试阶段 现在,仅针对 InternetExplorerDriver
我正在使用C#在selenium web驱动程序中为Chrome浏览器编写一个自动化脚本。我陷入了一个场景:多个选项卡在同一浏览器中打开,我需要导航到浏览器的第一个选项卡,并需要在“身份验证”对话框中重新输入登录凭据。 授权窗口截图如下: 我无法导航到第一个选项卡,也无法传递用户名 执行上述代码后,将出现以下错误: WebDriver等待有一些无效的参数。参数2:不能从int转换为System.时
我正在尝试在ASP.NET5中实现OAuth承载令牌身份验证,并且正在努力寻找一个如何实现这一点的示例,因为OWIN的东西在ASP.NET5中发生了变化。 例如IApplicationBuilder.UseOAuthAuthorizationServer()和IApplicationBuilder。UseOAuthBearerAuthentication()要么不再存在,要么缺少引用? 如有任何指