angularjs – 确定承载令牌是否已过期或刚被授权
我的角度应用程序正在使用文档系列
http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/中所述的承载令牌.我已经按照分叉示例在访问令牌已过期(通过401 http代码)时无缝刷新令牌.
我的问题是如何确定承载令牌是否过期或根据确定的角色是否是未经授权的? 例如,我的web api方法具有[Authorize(Roles =“Admin”)]的属性.当我打电话时,我收到我的401错误,这是预期的.但是,当我的访问令牌过期并且我进行另一个web api方法调用时,它也返回一个401错误.在我的拦截器中收到我的responseError处理程序: responseError: function (rejection) { var deferred = q.defer(); if (rejection.status === 401) { var authService = $injector.get('authService'); authService.refreshToken().then(function (response) { _retryHttpRequest(rejection.config,deferred); },function () { authService.logOut(); $location.path('/dashboard'); deferred.reject(rejection); }); } else { deferred.reject(rejection); } return deferred.promise; } 我正在玩不同的东西,但基本上,我想刷新我的令牌,并在访问令牌过期时重新发送我的请求;但是,如果由于指定的角色,它真的是拒绝请求,我不想刷新我的令牌. 有什么想法吗?
正如我对Cory Silva的评论的回应所指出的那样,Web API Authorize属性将总是返回401未授权的身份验证和授权.
请参阅以下文章和主题: http://leastprivilege.com/2014/10/02/401-vs-403/ Why does AuthorizeAttribute redirect to the login page for authentication and authorization failures? 看起来有两个选择: >当我从localStorage中存储从我的授权服务器检索到的令牌时,我也存储令牌的到期.在拦截器responseError函数中,我将存储的令牌到期与当前的datetime进行比较.如果确定已过期,请刷新令牌并重新发送请求. responseError: function (rejection) { var deferred = q.defer(); if (rejection.status === 401) { var tokenExpired = false; var authData = localStorage.get('authorizationData'); if (authData) { tokenExpired = moment().isAfter(authData.expiration); } if (tokenExpired) { var authService = auth;//$injector.get('authService'); authService.refreshToken().then(function (response) { _retryHttpRequest(rejection.config,deferred); },function () { authService.logOut(); $state.go('error'); deferred.reject(rejection); }); } else { $state.go('error'); deferred.reject(rejection); } } else { $state.go('error'); deferred.reject(rejection); } return deferred.promise; } >在上面引用的stackoverflow线程中使用接受的答案,并创建我自己的AuthorizeAttribute来确定令牌到期与未经授权的访问. [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method,Inherited = true,AllowMultiple = true)] public class AuthorizeAttribute : System.Web.Http.AuthorizeAttribute { protected override void HandleUnauthorizedRequest(HttpActionContext actionContext) { if (actionContext.RequestContext.Principal.Identity.IsAuthenticated) { actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Forbidden); } else { base.HandleUnauthorizedRequest(actionContext); } } } 我想我将使用选项2,以便错误代码更清楚一些客户端. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何创建自定义Angular Material模块? (材料v2.0.0-beta.3
- Docker 基础 : Dockerfile
- bootstrap弹出登录框【带合法性检查】
- angularjs 注入报错 Error: [$injector:unpr]
- Shell $0, $#, $*, $@, $?, $$
- 如何更改订单:bnext和:bimvious在vim?
- scala – 如何在application.conf中设置默认值并使用Enviro
- Scala中的哪些功能/特性仅作为底层平台的特许权存在,如果定
- angularjs 二维数组 加 file文件绑定
- 手把手教你把Vim改装成一个IDE编程环境(图文) -- 续1