什么被认为是WPF和WCF应用程序的用户身份验证/授权的“最佳实践”?

时间:2015-07-08 20:48:45

标签: wcf authentication architecture authorization desktop-application

假设我有一个.NET富客户端(WPF)应用程序,它将同时部署在3个不同的场景中:

  1. 客户&服务器代码在单个进程中运行
  2. 客户端代码在Intranet计算机上运行,​​并通过WCF与运行应用程序/域/基础结构代码的服务器机器进行通信
  3. 与#2相同,但客户端可以在防火墙外部的计算机上运行。自定义用户列表&角色应集中维护(即凭证不基于Windows登录)
  4. 为此应用程序实现相同的用户授权/身份验证模型的简单,经过验证的做法是什么?即,无论应用程序的部署方式如何,我都希望在表示层,应用程序层,域层等中使用相同的方法。

    是否应通过我现有的Entity Framework模型在我的SQL数据库中明确维护用户/角色? Thread.CurrentPrincipal应该是需要授权某些应用功能的代码使用的方法,还是某些IUserService应该依赖注入?

    这是一个低调的应用程序,因此安全性并不重要 - 只是一些基本的东西。

    由于

    修改

    花了几个小时研究基于WIF /声明的身份验证后,我仍然看不到有关如何创建使用此类安全性的独立.NET桌面应用程序的任何指导。所有讨论都适用于ASP.NET或WCF。我需要我的应用程序使用可在分布式(WCF)和独立部署方案中使用的标准方法

2 个答案:

答案 0 :(得分:1)

一般来说,最好选择基于令牌的身份验证,例如JWT。主要原因是它在各种类型的客户端和服务器中具有灵活性。例如,如果将来您需要添加移动应用程序(IOS,Android,等等),您可以毫无问题地执行此操作。您还可以使用WebApi等Restful服务增强您的应用程序。

因此,如果您启动该项目,我建议您使用基于令牌的身份验证。

查看这些网址,您会发现它们很有用:

https://msdn.microsoft.com/en-us/library/ms751506%28v=vs.110%29.aspx

http://www.rhyous.com/2015/02/05/basic-token-service-for-wcf-services-part-1/

答案 1 :(得分:1)

看看这个。我认为它是你正在寻找的东西:

https://gist.github.com/stonetip/8745656

var tokenHandler = new JwtSecurityTokenHandler();

        var convertedSecret = EncodeSigningToken(ConfigurationManager.AppSettings["ClientSecret"]);

        // Set the expected properties of the JWT token in the TokenValidationParameters
        var validationParameters = new TokenValidationParameters()
        {
            AllowedAudience = ConfigurationManager.AppSettings["AllowedAudience"],
            ValidIssuer = ConfigurationManager.AppSettings["Issuer"],
            SigningToken = new BinarySecretSecurityToken(convertedSecret)
        };

        Thread.CurrentPrincipal = tokenHandler.ValidateToken(token, validationParameters);

        if (HttpContext.Current != null)
        {
            HttpContext.Current.User = Thread.CurrentPrincipal;
        }