通过用户名和密码进行WCF服务授权

通过用户名和密码进行WCF服务授权,wcf,passwords,authorization,asp.net-3.5,Wcf,Passwords,Authorization,Asp.net 3.5,2011年9月3日编辑,增加一个相关问题 你好, 我是WCF的新手,现在正在参加速成班 能让我再看一眼我的计划吗 以下是(计划的)详细信息: 其目标是提供一个可访问互联网的WCF服务,该服务使用用户名和密码进行授权,凭证和消息内容在传输过程中受SSL保护 wcfsoap服务 绑定:wsHttpBinding 身份验证:用户名身份验证(自定义) 安全模式:运输 这些物品会优雅地生活在一起吗?我不确定是否需要将安全模式更改为“TransportWithMessageCredential” 一个相

2011年9月3日编辑,增加一个相关问题

你好,

我是WCF的新手,现在正在参加速成班

能让我再看一眼我的计划吗

以下是(计划的)详细信息:

其目标是提供一个可访问互联网的WCF服务,该服务使用用户名和密码进行授权,凭证和消息内容在传输过程中受SSL保护

wcfsoap服务

  • 绑定:wsHttpBinding
  • 身份验证:用户名身份验证(自定义)
  • 安全模式:运输
这些物品会优雅地生活在一起吗?我不确定是否需要将安全模式更改为“TransportWithMessageCredential”

一个相关的问题:我正在尝试获取身份信息,类似于使用HttpContext.Current.User。这就是我能做到的吗

IIdentity myIdentity = 
OperationContext.Current.ServiceSecurityContext.PrimaryIdentity;
如果需要更改绑定、身份验证或安全模式,请通知我

非常感谢


编辑-附加问题:最初构思时,计划是让消费者发送用户名和密码作为信息的一部分。凭据将由SSL保护。然后,在各自服务方法的代码中,我将评估它们是否具有访问权限并停止它们。这似乎是一种更简单的实现授权的方法,但我需要知道有什么缺点吗?

是的,这些设置应该很好-wsHttpBinding支持使用用户名/密码凭据的传输安全性

至于身份:在您的服务端代码中,您可以检查
ServiceSecurityContext
,并在上面找到呼叫者的身份:

ServiceSecurityContext secCtx = ServiceSecurityContext.Current;
var identity = secCtx.PrimaryIdentity;

还有一个问题:我是否可以仅出于概念验证/测试目的,取消验证和密码验证并关闭“不使用传输安全性”?我想使用Cassini进行测试,而不是制作证书等来测试uname/密码功能。谢谢@不,我不这么认为。由于您将uname/pwd与消息一起发送,因此需要保护传输。澄清一下,这仅用于开发目的。你是说如果我使用UsernameAuthentication,那么在没有传输安全的情况下它将无法运行吗?另外-请参见询问相关问题的编辑。谢谢@D-Sect:是的,这是我的理解-如果您没有任何传输安全性,您就不能在wsHttpBinding中使用username/pwd身份验证。