假设我有一个.NET富客户端(WPF)应用程序,它将同时部署在3个不同的场景中:
为此应用程序实现相同的用户授权/身份验证模型的简单,经过验证的做法是什么?即,无论应用程序的部署方式如何,我都希望在表示层,应用程序层,域层等中使用相同的方法。
是否应通过我现有的Entity Framework模型在我的SQL数据库中明确维护用户/角色? Thread.CurrentPrincipal
应该是需要授权某些应用功能的代码使用的方法,还是某些IUserService
应该依赖注入?
这是一个低调的应用程序,因此安全性并不重要 - 只是一些基本的东西。
由于
花了几个小时研究基于WIF /声明的身份验证后,我仍然看不到有关如何创建使用此类安全性的独立.NET桌面应用程序的任何指导。所有讨论都适用于ASP.NET或WCF。我需要我的应用程序使用可在分布式(WCF)和独立部署方案中使用的标准方法
答案 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;
}