wcf 登录认证 angular 认证重定向
自定义认证管理器,分为两级:1、登陆认证。2、权限认证。权限主要是用户、角色、角色用户关系、功能(系统资源)、角色功能关系,5部分决定用户的权限(视图)。
两层认证都通过后,更新session的最新交互时间,session有效期30分钟。
每个请求头部必须另加sessionID、token,加sessionID的目的是先根据ID加快检索,再和token对比,是否超时、退出等。
class WmsServiceAuthorizationManager : ServiceAuthorizationManager
{
protected override bool CheckAccessCore(OperationContext operationContext)
{
var via = operationContext.IncomingMessageProperties.Via;
var ctx = WebOperationContext.Current;
var id = ctx.IncomingRequest.Headers["id"];
var token = ctx.IncomingRequest.Headers["token"]; // 若不是登录接口
if (via.Segments.Count(x => x.ToLower().Equals("login") || x.ToLower().Equals("logout")) == )
{
long sessionId = ;
if (!long.TryParse(id, out sessionId))
{
// 若提供的sessionID无效,则登陆认证失败=401
ctx.OutgoingResponse.StatusCode = HttpStatusCode.Unauthorized;
return false;
}
// 若提供的ID 和 token无效,则登陆认证失败=401
var userSvc = new UserSvc();
var session = userSvc.GetSession(sessionId, token);// session有效期30分钟无动作
if (session == null || session.logout_time != null
|| session.user_id == null || session.update_time < DateTime.Now.AddMinutes(-))
{
ctx.OutgoingResponse.StatusCode = HttpStatusCode.Unauthorized;
return false;
}
userSvc.UpdSession(sessionId, token);// 更新最后一次交互时间 // 验证权限是否足够,否则禁止访问=403
var userAuths = userSvc.GetUserAuths(session.user_id.Value);
bool isAuth = via.Segments.Any(segment => userAuths.Count(x => x.fun_name.ToLower().Equals(segment.ToLower())) > );
if (!isAuth)
{
ctx.OutgoingResponse.StatusCode = HttpStatusCode.Forbidden;
return false;
}
}
return true;
}
}
宿主绑定认证管理器:
static void Main(string[] args)
{
ServiceHost host = new ServiceHost(typeof(Wms.Service.WmsService));
host.Authorization.ServiceAuthorizationManager = new WmsServiceAuthorizationManager();
host.Open();
Console.WriteLine("已启动");
Console.WriteLine("回车键退出");
Console.ReadLine();
}
angular请求前统一添加令牌,和认证失败后重定向、及权限不足提示:
app.factory('interceptor', function ($q, $location) {
return {
request: function (config) {
if (config.url.indexOf('/login/') === -1 && sessionStorage.session) {
var session = JSON.parse(sessionStorage.session);
config.headers['id'] = session.id;
config.headers['token'] = session.token;
}
// 禁止HTML缓存
if(config.url.indexOf('.html') > 0){
//var nocache = '?v=' + new Date().getTime();
var idx = config.url.indexOf('?v=');
if(idx === -1)
config.url += appVersion;
else{
config.url = config.url.substr(0, idx) + appVersion;
}
}
return config || $q.when(config);
},
response: function (response) {
if (response.config.url.indexOf('service') > -1) {
//todo 预处理请求结果
}
return response || $q.when(response);
},
responseError: function (response) {
if (response.status === 401) {// If our response status is unauthorized
sessionStorage.removeItem('session');
layer.msg('认证失败,重新登录!');
$location.path('/main/index');// Redirect to the login screen
}else if (response.status === 403) {// If our response status is Forbidden
layer.msg('认证失败,权限不足');
}else {
return $q.reject(response);// Reject our response
}
}
};
});
添加拦截器
$httpProvider.interceptors.push('interceptor');
wcf 登录认证 angular 认证重定向的更多相关文章
- DRF接入Oauth2.0认证[微博登录]报错21322重定向地址不匹配
DRF接入Oauth2.0认证[微博登录]报错21322重定向地址不匹配 主题自带了微博登陆接口,很简单的去新浪微博开放平台创建了网页应用,然后把APP ID和 AppSecret填好后,以为大功告成 ...
- ASP.NET Identity登录原理 - Claims-based认证和OWIN
MVC5 - ASP.NET Identity登录原理 - Claims-based认证和OWIN 在Membership系列的最后一篇引入了ASP.NET Identity,看到大家对它还是挺感兴趣 ...
- OpenWRT下实现Portal认证(WEB认证)
首先简单介绍一下什么是Portal认证,Portal认证,通常也会叫Web认证,未认证用户上网时,设备强制用户登录到特定站点,用户可以免费访问其中的服务.当用户需要使用互联网中的其它信息时,必须在门户 ...
- 翻译:WebApi 认证--用户认证Oauth解析
The Web API v2用户认证模板提供了流行的应用用户认证场景,如.使用本地帐号的用户名密码认账 (包括创建用户.设置和修改密码)以及使用第三方的认证方式,如facebook,googl ...
- drf框架 - 三大认证组件 | 认证组件 | 权限组件 | 频率组件
RBAC 基于用户权限访问控制的认证 - Role-Based Access Control Django框架采用的是RBAC认证规则,RBAC认证规则通常会分为 三表规则.五表规则,Django采用 ...
- drf三大认证:认证组件-权限组件-权限六表-自定义认证组件的使用
三大认证工作原理简介 认证.权限.频率 源码分析: from rest_framework.views import APIView 源码分析入口: 内部的三大认证方法封装: 三大组件的原理分析: 权 ...
- 自学Aruba7.1-Aruba安全认证-WPA2-PSK认证(web页面配置)
点击返回:自学Aruba之路 自学Aruba7.1-Aruba安全认证-WPA2-PSK认证(web页面配置) 步骤1 建立AP Group,命名为test-group 步骤2 将AP加入到AP G ...
- 自学Aruba7.2-Aruba安全认证-Portal认证(web页面配置)
点击返回:自学Aruba之路 自学Aruba7.2-Aruba安全认证-Portal认证(web页面配置) 步骤1 建立AP Group,命名为testportal-group 步骤2 将AP加入到 ...
- 自学Aruba7.4-Aruba安全认证-MAC认证(web页面配置)
点击返回:自学Aruba之路 自学Aruba7.4-Aruba安全认证-MAC认证(web页面配置) 由于前三节已经讲述了3种如何web页面配置安全认证,MAC认证就不过多讲解重复的步骤. 步骤1 ...
随机推荐
- [网络流24题] 最长K可重区间集问题
题目链接:戳我 当时刷24题的时候偷了懒,没有写完,结果落下这道题没有写qwq结果今天考试T3中就有一部分要用到这个思想,蒟蒻我硬是没有想到网络流呜呜呜 最大费用流. 就是我们考虑将问题转化一下,转化 ...
- “全栈2019”Java第八十二章:嵌套接口能否访问外部类中的成员?
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- CSS动态定位
$(document).ready(function(){ $('body').on('click', '#start_timer', function() { var laydate = $(&qu ...
- PHP程序执行流程
1, PHP文件一定放在服务器的,但是PHP中不同的内容会在不同的地方执行.下图演示了浏览器请求一个php页面的流程. 2,时序图如下所示,在浏览器中输入url后,首先去本机hosts文件中解析ip地 ...
- [ActionScript 3.0] 自定义右键菜单
将自定义右键菜单的一些属性和方法归纳到AddRightMenu.as,通过实例化此类,调用相关方法即可测试! package { import flash.display.Sprite; import ...
- [转] 迁移 VMware 虚拟机到 KVM
迁移 VMware 虚拟机到 KVM 如何迁移 VMware 上的 Windows 及 Linux 虚拟机到基于 KVM 的虚拟机 目前 x86 平台上最流行的虚拟化软件是 VMware 公司的系列产 ...
- 实验三敏捷开发与XP实践《Java开发环境的熟悉》实验报告
一.实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 2.完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报 ...
- EntityFramework First,FirstOrDefault,Single,SingleOrDefault的区别
操作符 如果源序列是空的 源序列只包含一个元素 源序列包含多个元素 First 抛异常 返回该元素 返回第一个元素 FirstOrDefault 返回default(TSource) 返回该元素 返回 ...
- mysql安装启动 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
首次安装mysql 启动 mysql -uroot 以下错误: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using ...
- C语言实现全排列和回溯法总结
一.递归实现全排列 #include"cstdio" ]; void print_permutation(int n,int *A,int cur){ if(cur==n){ ;i ...