当前位置:  开发笔记 > 编程语言 > 正文

如何在自己的客户端 - 服务器应用程序中使用System.IdentityModel

如何解决《如何在自己的客户端-服务器应用程序中使用System.IdentityModel》经验,为你挑选了2个好方法。

我有一个基于TcpClient/TcpListener和SslStream的简单客户端 - 服务器应用程序.客户端可以使用X509Certificate对服务器进行身份验证,也可以在SslStream建立后通过发送用户名和密码进行身份验证.

WCF使用System.IdentityModel命名空间进行身份验证,但显然可以在任意应用程序中使用 - 这听起来很有趣.关于如何做到这一点的信息很少(或者我今天的Google foo很弱).

所以,我的问题是:我需要做什么才能将System.IdentityModel与我的应用程序集成?我不确定我是否需要所有的ClaimSet内容,但如果用户只使用他们的Windows帐户或任何其他提供的身份验证机制登录就会很好.(不幸的是,我不能只是切换到WCF但必须使用自定义协议,尽管我可以在必要时对其进行一些更改.)



1> dtb..:

我的Google foo确实很弱.答案正好在我的问题中的链接背后.所以这里有几个链接到这个博客,以防有人最终有相同的问题.

首先,您应该尝试理解"声明设置内容":

声明

索赔集

检查索赔集

Windows和X509Certificate声明集

索赔集的典型操作

然后,您需要知道声明集的来源:

授权策略,上下文和声明转换

WCF中的声明转换

WCF之外的授权上下文和声明转换

有了这些知识,它实际上变得非常简单.

如果我理解正确,基本工作流程将是这样的:

    客户创建SecurityToken使用aSecurityTokenProvider

    客户端序列化SecurityToken使用aSecurityTokenSerializer

    服务器反序列化SecurityToken使用aSecurityTokenSerializer

    服务器IAuthorizationPolicy使用a 创建sSecurityTokenAuthenticator

    服务器AuthorizationContextIAuthorizationPolicys 创建

    完成

例:

// Create the SecurityTokenProvider
var p = new UserNameSecurityTokenProvider("username", "password");

// Get the SecurityToken from the SecurityTokenProvider
var t = p.GetToken(TimeSpan.FromSeconds(1.0)) as UserNameSecurityToken;

// ... transmit SecurityToken to server ...

// Create the SecurityTokenAuthenticator
var a = new CustomUserNameSecurityTokenAuthenticator(
    UserNamePasswordValidator.None);

// Create IAuthorizationPolicies from SecurityToken
var i = a.ValidateToken(t);

// Create AuthorizationContext from IAuthorizationPolicies
var c = AuthorizationContext.CreateDefaultAuthorizationContext(i);
ShowClaims(c.ClaimSets);

对于X509SecurityTokens使用X509SecurityTokenProvider/ Authenticator.对于WindowsSecurityTokens,有一个WindowsSecurityTokenAuthenticator但不是提供者; 相反,使用WindowsSecurityToken构造函数:

var t = new WindowsSecurityToken(WindowsIdentity.GetCurrent());

这非常有效.到目前为止我唯一省略的是令牌序列化.有一个SecurityTokenSerializer类在.NET框架中有一个实现:WSSecurityTokenSerializerWCF附带的类.

序列化UserNameSecurityTokens和X509SecurityTokens就像一个魅力(没有尝试反序列化),但WindowsSecurityToken序列化器显然不支持s.这给我留下了我已经拥有的两种身份验证方法(证书和用户名/密码),而且,正如我不想要的那样AuthorizationContext,我会坚持我拥有的东西:)



2> user849924..:

我没有在现有解决方案上发表评论的声誉,但我想将新网址发布到解决方案中列出的博客,因为这些不再适用.如果有人可以将此更改为评论,我会非常感激.

声明

索赔集

检查索赔集

Windows和X509证书声明集

索赔集的典型操作

授权政策,背景和索赔转换

WCF中的声明转换

WCF之外的授权上下文和声明转换

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有