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;
       }
   }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

【Go 语言社区】Go语言 Cookie的使用

首先看看Cookie的结构体 type Cookie struct { Name string Value string Path string // opt...

2726
来自专栏飞扬的花生

基于ASP.MVC票据FormsAuthenticationTicket身份认证

做一个最基础的业务需求用户登录,将此用户的身份发回到客户端的Cookie,之后此用户再访问这个web应用就会连同这个身份Cookie一起发送到服务端。服务端上的...

3457
来自专栏码农分享

4.爬虫框架Clawler 爬取优酷电影名 分页+多线程

基于文章三我们实现了爬虫框架单页面应用程序的代码,那么在这一章节我们将使用框架进行内容分页和多线程的操作

1513
来自专栏跟着阿笨一起玩NET

如何把已经属于一个DataSet的DataTable加到另一个DataSet中解决方法

1681
来自专栏王磊的博客

C#转换为String的效率测试

  今天早上突然想起转换string的效率问题,于是就在百度和google查了个遍,但是似乎众说纷纭,只好自己亲自东西测试下了。   先来说说常用的方式吧:(s...

3415
来自专栏跟着阿笨一起玩NET

ASP.NET通过http/https的POST方式,发送和接受XML文件内容

 本文转载:http://hi.baidu.com/ysyhyt/item/5011ae39ce3cf49fb80c0395

3371
来自专栏晓晨的专栏

.NET Core 开源工具 IPTools - 快速查询 IP 地理位置、经纬度信息

快速查询中国IP地址信息,包含国家、省份、城市、和网络运营商。非中国IP只支持查询国家。

861
来自专栏跟着阿笨一起玩NET

ASP.NET中Cookie跨域的问题及解决代码

http://www.liyumei.net.cn/post/share18.html

1061
来自专栏微服务

C# 如何在Excel 动态生成PivotTable

Excel 中的透视表对于数据分析来说,非常的方便,而且很多业务人员对于Excel的操作也是非常熟悉的,因此用Excel作为分析数据的界面,不失为一种很好的选择...

29712
来自专栏菩提树下的杨过

c#如何启动/干掉/查找 进程

查找/列出进程很容易,但干掉进程得借助系统命令ntsd.exe,详细用法见下面的代码 :  using System; using System.Diagnos...

22810

扫码关注云+社区