使用Windows帐户授权

jim*_*zer 8 c# windows windows-store-apps

在我的Windows应用商店应用程序(c#)中,我有自己的授权机制:

  1. 用户通过他们的帐户名/密码并将其发送到服务器.
  2. 服务器生成唯一令牌并将其返回给用户.
  3. 对于所有下一个请求,用户使用此令牌.

现在我正在尝试仅使用Windows帐户进行授权.
MSDN 提供 UserInformation class,我可以得到name for the user accountdomain name for the user.但我觉得这对我的授权方案来说还不够.

方法GetSessionInitiationProtocolUriAsync看起来也很有趣,但我不知道如何正确使用这样Uri的授权.

如何在我的应用程序中使用Windows帐户进行授权?
注意:我对这两种情况感兴趣:当域内用户与否时.

谢谢.

dmp*_*lla 5

有很多方法可以实现此目的,但是如果您想保持简单并拥有该过程,则可以实现自己的身份验证方法,该方法可以在身份验证成功后根据其密码和秘密盐建立一个哈希值,然后将其返回给用户。作为Cookie等,您可以使用它来验证之后的每个请求。

关于授权,您可以使用以下类或仅使用普通的旧RoleProviders来实现自己的或使用链接到本地​​计算机组或活动目录的基于角色的提供程序。

您可以使用下面描述的方法或使用ASP.Net 的身份验证和授权提供程序来实现自己的身份验证方法(如果服务器在.net上运行)。基本上是Asp.Net成员资格和角色提供者。但是,下面详述的方法将允许您访问和修改角色以及有关用户的其他信息。

在.Net 3.5+中,有一个名为System.DirectoryServices.AccountManagement的新命名空间。

来自MSDN的代码段

System.DirectoryServices.AccountManagement命名空间可跨多个主体存储(Active Directory域服务(AD DS),Active Directory轻型目录服务(AD LDS)和计算机SAM( MSAM)。

System.DirectoryServices.AccountManagement管理与System.DirectoryServices命名空间无关的目录对象。托管目录服务应用程序可以利用AccountManagement API来简化用户,计算机和组主体的管理。以前需要对商店或冗长的代码有深入了解的解决方案,例如查找用户所属的所有组,都是使用AccountManagement API通过几行代码完成的。

您可以使用以下代码轻松验证AD上的用户凭据:

 bool valid = false;
 using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
 {
     valid = context.ValidateCredentials( username, password );
 }
Run Code Online (Sandbox Code Playgroud)

如果要使用本地计算机帐户进行验证,也可以更改构造函数:

new PrincipalContext(ContextType.Machine)
Run Code Online (Sandbox Code Playgroud)

您可以查看文档中的其他选项,此外,这还可以使您从商店中获取各种信息,例如会员资格等。

新的名称空间是Microsoft尝试简化DirectoryServices的方法,我认为这是成功的,但是如果您想要更多的控制权,则可以使用DirectoryServices类,但这会增加解决方案的复杂性。

如果您需要更多信息,或者您认为它与您所寻找的不完全相同,希望对您有所帮助。让我知道,我将努力改善答案。


Bin*_*ose -1

一旦我遇到了类似的情况,(客户端应用程序需要使用很少的身份凭证连接到服务器。在自定义身份验证之后,将为客户端授予一个令牌,而只需很少的声明,然后每个客户端请求都将根据给定的令牌进行验证) ,如果您遇到类似的情况,请考虑此链接,它帮助我解决了问题。

http://bitoftech.net/2014/06/09/angularjs-token-authentication-using-asp-net-web-api-2-owin-asp-net-identity/

注意:您可以通过分别扩展claimsAuthenticationManager和Claimsauthorizationmanager来实现自定义身份验证和授权