WCF服务中操作FormsAuthentication的Cookie
时间:2022-04-23
本文章向大家介绍WCF服务中操作FormsAuthentication的Cookie,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在asp.net 应用程序和WCF服务之间共享FormsAuthentication,默认是不支持的,设置一下非常的简单,只需要两步就可以了:
1、在web.config的system.serviceModel增加一个配置:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>
2、为WCF打上标签
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
这样在WCF服务上就可以操作cookie了。
附注:
WCF UserAuthenticate
[ServiceContract]
public interface IUserAuthenticate
{
[OperationContract]
string VerifyUser(string username, string password,string appcode);
}
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class UserAuthenticate : IUserAuthenticate
{
public string VerifyUser(string username, string password, string appcode)
{
var appRep = new AppsRepository();
AppInfo app = appRep.GetApp(appcode);
if (app == null)
return null;
LoginUserStatus loginStatus = LoginUserStatus.Success;
if (loginStatus == LoginUserStatus.Success)
{
System.Web.Security.FormsAuthentication.SetAuthCookie(username, true);
// 创建验证票
System.Web.Configuration.FormsAuthenticationConfiguration formsConfig = new System.Web.Configuration.FormsAuthenticationConfiguration();
FormsAuthenticationTicket formAuthTicket = new
FormsAuthenticationTicket(
1, // 版本
username, // 用户名称
DateTime.Now, // 创建时间
DateTime.Now.AddMinutes(formsConfig.Timeout.TotalMinutes), // 失效时间
true,""); // 用户数据
//加密票
string encryptedTicket = FormsAuthentication.Encrypt(formAuthTicket);
// 以加密票的密文存入Cookie
HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
authCookie.HttpOnly = true;
authCookie.Path = FormsAuthentication.FormsCookiePath;
authCookie.Secure = FormsAuthentication.RequireSSL;
if (FormsAuthentication.CookieDomain != null)
{
authCookie.Domain = FormsAuthentication.CookieDomain;
}
if (formAuthTicket.IsPersistent)
{
authCookie.Expires = formAuthTicket.Expiration;
}
HttpContext.Current.Response.Cookies.Add(authCookie);
FormsIdentity identity = new FormsIdentity(formAuthTicket);
GenericPrincipal principal = new GenericPrincipal(identity, null);
HttpContext.Current.User = principal;
PassportTicket ticket = new PassportTicket(formAuthTicket, encryptedTicket, app);
if (ticket.Save())
{
return ticket.Ticket.PublicTicket;
}
return null;
}
return null;
}
}
- 数据库中间件 Sharding-JDBC 源码分析 —— SQL 解析(一)之语法解析
- phalcon-入门篇4(log日志和session缓存)
- zephir-(5)类型
- zephir-(10)内置函数
- zephir-(9)类和对象2
- 深度学习中的动手实践:在CIFAR-10上进行图像分类
- 数据库中间件 MyCAT源码分析 —— XA分布式事务
- [喵咪Golang(1)]Go语言开篇
- phalcon-进阶篇2(拦截器)
- 【死磕Java并发】—–深入分析synchronized的实现原理
- phalcon-进阶篇1(过滤与清理)
- phalcon-入门篇9(view层基础使用)
- PhalApi视频教程
- 【学术】一文搞懂自编码器及其用途(含代码示例)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- [笔记整理]几个有点重要的知识点
- PAT (Basic Level) Practice (中文)1005 继续(3n+1)猜想 (25 分)
- PAT (Basic Level) Practice (中文)1033 旧键盘打字 (20 分)
- SAP电商云CCV2 Restful API enablement
- PAT (Basic Level) Practice (中文)1007 素数对猜想 (20 分)
- 两种方式解决子集问题
- PAT (Basic Level) Practice (中文)1035 插入与归并 (25 分)
- PAT (Basic Level) Practice (中文)1008 数组元素循环右移问题 (20 分)
- PAT (Basic Level) Practice (中文)1037 在霍格沃茨找零钱 (20 分)
- 编译原理实战入门:用 JavaScript 写一个简单的四则运算编译器(三)模拟执行
- PAT (Basic Level) Practice (中文)1011 A+B 和 C (15 分)
- SAP Spartacus里ng-template的一个实际应用
- PAT (Basic Level) Practice (中文)1039 到底买不买 (20 分)
- PAT (Basic Level) Practice (中文)1013 数素数 (20 分)
- PAT (Basic Level) Practice (中文)1041 考试座位号 (15 分)