前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WCF服务中操作FormsAuthentication的Cookie

WCF服务中操作FormsAuthentication的Cookie

作者头像
张善友
发布2018-01-19 16:00:37
5300
发布2018-01-19 16:00:37
举报
文章被收录于专栏:张善友的专栏张善友的专栏

在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]

代码语言:js
复制
 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;
       }
   }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2009-09-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档