zoukankan      html  css  js  c++  java
  • 使用WCF RIA Service中的Authentication进行自定义验证

          不少文章有提到怎样使用WCF RIA Service中的验证功能,但一般都是以建立一个SilverLight Business Application项目作为开始,然而SilverLight Business Application的模板并不是那么符合实际需要,默认添加了一堆的类、方法,在这个基础上去调整,实在恶心,故实验了一下在普通的SilverLight项目中使用。现总结如下:

         1、建立一个普通的SilverLight项目,选中“Enable WCF RIA Service”,假设项目SL项目名为MyAuthentication,对应WEB项目为MyAuthentication.Web;

         2、在MyAuthentication.Web项目中添加一项:Authentication Domain Service,使用"Authentication Domain Service"项目文件模板将自动添加一个继承自AuthenticationBase<T>的类,一个继承自UserBase的User类,假设继承自AuthenticationBase<T>的类名为AuthenticationDomainService;

         3、编译解决方案,编译成功后将在SL项目中生成类:AuthenticationDomainContext、WebContext、User;

         接下来就可以做验证功能了。在AuthenticationDomainService类中重载ValidateUser方法可实现自定义验证,重载GetAuthenticatedUser方法可实现自定义加载当前登录用户信息。

         4、扩展User类,重载ValidateUser、GetAuthenticatedUser方法:

    View Code
    [EnableClientAccess]
    public class AuthenticationDomainService : AuthenticationBase<User>
    {
    // To enable Forms/Windows Authentication for the Web Application, edit the appropriate section of web.config file.

    protected override bool ValidateUser(string userName, string password)
    {
    return userName == "zhangsan" && password == "123456";
    }

    protected override User GetAuthenticatedUser(IPrincipal principal)
    {
    return new User() { Name = principal.Identity.Name, DisplayName = "张三" };
    //return base.GetAuthenticatedUser(principal);
    }
    }

    public class User : UserBase
    {
    // NOTE: Profile properties can be added here
    // To enable profiles, edit the appropriate section of web.config file.

    // public string MyProfileProperty { get; set; }

    public User()
    : base()
    {

    }

    public string DisplayName { get; internal set; }
    }

          编译后貌似就可以在SL项目中使用WebContext了,其实不然。还需要做以下准备工作:

          5、在SL的App类的构造函数中加上WebContext初始化代码:

    View Code
    WebContext webContext = new WebContext();
    webContext.Authentication = new FormsAuthentication();
    //webContext.Authentication = new WindowsAuthentication();
    this.ApplicationLifetimeObjects.Add(webContext);

          6、在Web.Config中指定身份验证模式为Forms验证:

          <authentication mode="Forms">

          7、测试:

    View Code
    private void button1_Click(object sender, RoutedEventArgs e)
    {
    LoginOperation operation = WebContext.Current.Authentication.Login(GetLoginParameters(), LoginCompeted, null);
    }

    private LoginParameters GetLoginParameters()
    {
    return new LoginParameters("zhangsan", "123456");
    }

    private void LoginCompeted(LoginOperation operation)
    {
    if (operation.LoginSuccess)
    {
    MessageBox.Show("success");
    MessageBox.Show(WebContext.Current.User.DisplayName);
    }
    else if (operation.HasError)
    {
    MessageBox.Show(operation.Error.Message);
    operation.MarkErrorAsHandled();
    }
    else if (!operation.IsCanceled)
    {
    MessageBox.Show("用户名或密码错误!");
    }
    }


          参考资料:http://msdn.microsoft.com/zh-cn/library/ee707361%28v=vs.91%29.aspx

     

  • 相关阅读:
    用C#生成足够随机的互不相同的随机数
    CRM
    Asp.net2.0部署时TreeView控件无法正常显示没有图片的问题
    javascript解析json
    jQuery插件倒计时。
    ASP.NET MVC + jQuery + Newtonsoft.Json 快乐的AJAX
    .NET中DataSet转化Json工具类
    jQuery load html
    jQuery 使用注意点技巧1
    WEB页面多语言支持解决方案
  • 原文地址:https://www.cnblogs.com/sdlfx/p/2431314.html
Copyright © 2011-2022 走看看