问题标签 [wcf-authentication]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
56995 浏览

wcf - WCF:由于身份验证失败,无法满足对安全令牌的请求

我编写了一个非常简单的 WCF 服务来发送和接收消息。我已经通过 VS 2008 默认 Web 服务器主机测试了该应用程序,一切正常。但是当我将 WCF 服务部署到另一台计算机的 IIS 时,我收到以下错误:

“由于身份验证失败,无法满足对安全令牌的请求。”

如何设置身份验证类型以在配置文件中使用我的自定义用户名和密码?如果不可能,请告诉我如何设置其 Windows 凭据,因为我使用的两台计算机不共享相同的用户。

0 投票
3 回答
29613 浏览

wcf - 使用 WCF 连接到使用用户名/密码进行身份验证的 WebService

我使用 Visual Studio 2008 创建了一个 Web 服务代理,它在 app.config 中为我创建了以下条目:

该网络服务具有用户名/密码身份验证,因此我需要在此处添加它。

我有点迷失在 WCF 文档的海洋中,我想我必须从 basicHttpBinding 更改为 wsHttpBinding 或 customBinding 才能添加身份验证元素,但我不太了解。任何人都可以提供任何快速提示或任何有用的链接来说明如何这样做吗?

编辑:

我将安全部分更改为:

并在代码中添加:

现在看来它可能正在使用凭据,但它给了我错误:

提供的 URI 方案“http”是无效的 URI 应为“https”

我什至不知道这是否是正确的方法......

0 投票
1 回答
1094 浏览

wcf - WCF ServiceSecurityContext 存储自定义数据的权利?

我有一个使用 Windows 身份验证的 WCF 应用程序。因此,我将在 System.Threading.Thread.CurrentPrincipal() 属性中找到一个 Windows Principal 对象。没关系。但是,我还有一个自定义主体对象,用于更细粒度的授权和审计。这是域用户,而不是 Windows 用户。我真的需要两者,并且正在寻找一个在服务端存储自定义用户的地方,以便在服务上运行的所有代码,通过业务和数据层,都可以访问这个用户。

客户端和服务器之间的通信由自定义行为和消息检查器处理。从客户端(ASP.NET Web 应用程序)调用服务时,这会从会话中获取当前用户并将其序列化为服务调用的自定义标头。在服务端,它将主体从标头中剥离出来,并将自定义主体放在这里:

因此,验证这种方法的问题:

  1. 这是在服务上存储自定义主体的有效方法吗?请记住,我希望 Windows 身份验证保持不变。
  2. 这是“最佳实践”吗?或者,还有更好的方法?
  3. 使用这种方法需要注意哪些陷阱或陷阱?

感谢您的输入。

0 投票
3 回答
16233 浏览

wcf - 如何在 BasicHttpBinding 中的 WCF 服务中进行身份验证?

我正在使用basicHttpBinding开发 WCF 服务,这些服务应该可以使用 .net 1.1 和 .net 2.0 访问,为此我使用的是basicHttpBinding
在旧的 ASMX Web 服务中,我使用了一个 Soap Header (AuthHeader) 来对每个请求的用户进行身份验证。

如何使用basicHttpBinding在 WCF 中进行身份验证?任何示例或教程都会有所帮助。


nRk

0 投票
2 回答
7475 浏览

x509certificate - WCF, Certificate Authentication - Common Errors and Confusing Arguments

I am trying to setup a WCF service to use a Certificate for Authenticating the client. I have read tons of posts on how to create the certificate, and I have been able to do so (finally).

I am installing the Cert Authority and the Cert on a server that runs Windows 2008 R2. When I open the MMC Certificates Snap-in, I choose Computer Account. Is this correct? I am doing this because my WCF service will run in a Windows Service, and will be running even when no user's are logged in. But admittedly, I don't know what the difference is between the three options:

  1. My user account
  2. Service account
  3. Computer account

Once the snap-in loads, I import the Authority Cert into Trusted Root Certification Authorities. Then, I import the cert into Trusted Publishers. I don't encounter any errors when doing this. When I do the import, of both the Authority Cert and the Cert signed by that authority, I don't make any reference to the .pvk file. It is my understanding that the private key is embedded in either the cert or the authority cert. Here are the commands I use to create each cert:

Notice I used -ss root. I have seen many posts using -ss My. I don't really understand what the difference is or when it is appropriate to use each value.

My WCF service runs on this machine inside a Managed Service (Windows Service). When I start my windows service, which hosts the WCF service, it crashes immediately and a seemingly common error is reported in the event viewer:

System.ArgumentException: It is likely that certificate 'CN=TempCertName' may not have a private key that is capable of key exchange or the process may not have access rights for the private key

I have found posts that say I need to grant permissions to the user running the service to the key.

This one seems to be a popular answer here on stackoverflow: Grant access with All Tasks/Manage Private Keys

But I don't have the option of All Tasks/Manage Private Keys

But I'm not clear on how to do that. But also, the service is running under my domain account, which is an administrator and is also the same user that installed the cert.

Please Help :)

0 投票
1 回答
894 浏览

silverlight-4.0 - Silverlight 4 在表单身份验证 cookie 到期时引发事件

当表单身份验证 cookie 过期时,我对如何在 silverlight 中触发事件感到困惑。我想立即将应用程序重定向到登录屏幕。我知道我可以等到网络服务调用失败,但我认为在输入数据后将用户重定向到登录是糟糕的客户体验。

0 投票
1 回答
360 浏览

wcf - 如果我不编写客户端,如何捕获 WCF 服务的用户名和密码?

我正在编写一个需要用户名和密码身份验证的 WCF 服务,但是,我不负责编写客户端以访问该服务,因此我不确定如何访问用户名和密码。举个例子,在测试时,我创建了服务,然后我创建了一个测试应用程序,它会为我实例化一个客户端,然后我会像这样设置用户名和密码:

我是否必须在某些标头中捕获客户端的用户名和密码,如果是这样,我将如何去做?也许 WCF 对此有一些准备,但我还不明白。如果需要更多说明,我很乐意编辑这篇文章。

0 投票
1 回答
7063 浏览

c# - 如何将用户名/密码凭据从 php 客户端传递到自托管 wcf 服务?

我有一个自托管的 wcf 服务,它只添加 2 个数字并返回值。它工作正常,但我不确定如何通过 php 客户端发送用户名和密码,因此它将根据我的 CustomUserNamePasswordValidator 进行验证。下面是 Add 方法的实现:

这是我当前的 App.Config:

我正在启动这样的服务:

对于 php 客户端,我正在做:

以上无需身份验证即可正常工作,但我希望能够从 phpclient 验证用户名和密码。当他们尝试访问我的服务时,我希望通过 UserNamePasswordValidator 的覆盖 Validate 方法验证用户名和密码,该方法当前定义为:

我只是使用 test 和 test 作为用户名和密码的示例。我知道我必须设置修改行为配置并进行绑定配置,因此服务将使用 CustomUserNamePasswordValidator,但由于我不了解 PHP,我不确定如何将凭据从 php 发送到 wcf 服务和发送凭据后,我不知道如何在 wcf 服务中进行设置。我没有创建 wcf 服务。我以为我可以做client.ClientCredentials.UserName.UserNameand client.ClientCredentials.UserName.Password,但这只是在我创建我不是的 .NET 客户端的情况下。

我遇到的另一个问题是,如果客户端是 php 客户端,我是否仅限于 basicHttpBinding?

另外,理想情况下,我想做的是从 php 客户端向 wcf 服务发送一个肥皂请求,所以如果有人能指出我正确的方向,那就太好了。

我只是尝试了以下,但它没有工作(添加被调用,但它没有经过身份验证)

更新:我的 PHP Soap 客户端初始化现在是:

通过执行上述操作,它在请求中添加了以下内容:

但是,托管在控制台应用程序中的我的 wcf 服务没有获得此授权,我有一个自定义用户名验证器,它具有硬编码的用户名测试值和密码测试值,但是当我尝试“test2 " 对于登录,它仍在调用该方法。我正在使用 TransportWithCredentialOnly 和 Message="UserName"

0 投票
1 回答
488 浏览

wcf - 对 WCF 服务进行身份验证

似乎有很多关于如何做到这一点的资源,但我还没有真正找到任何东西来准确地做我想做的事情。我正在尝试创建一个 WCF Web 服务,该服务需要用户进行身份验证才能执行任何操作(调用方法,请参阅 WSDL 等)。身份验证将是我编写的用于连接到我们的 LDAP 服务器的自定义部分。我想使用表单身份验证,因为我不希望客户端必须对每个请求重新进行身份验证。我希望该服务仅向客户端发送一个 Forms Auth 票证 cookie,客户端可以将其发回以供将来的请求(我可以将其用于不支持 cookie 的客户端环境,例如移动应用程序)。然而,在服务端,我需要能够在内存中存储每个用户的数据,这些数据保留用户身份验证组的缓存副本(以避免重复调用 LDAP 服务器),只需使用 Forms Auth 即可轻松查找票。我对 WCF 和表单身份验证还很陌生,所以如果您不跳过“简单”的事情,我将不胜感激。谢谢!

0 投票
1 回答
3283 浏览

wcf - 通过 PHP Soap 客户端发送登录名和密码不会被 WCF 服务主机接收?

我正在像这样实例化一个 PHP Soap 客户端:

当我在上面执行此操作时,请求包含:

Authorization: Basic dGVzdDI6dGVzdA==

但是我的 CustomUserNamePasswordValidator 没有接收到上述内容。我只是在控制台应用程序中运行 WCF 服务,所以我不知道如何在服务主机上设置客户端凭据。我将 TransportWithCredentialOnly 与 Basic HTTP 和 Message="UserName" 一起使用。我的 CustomUserNamePassword Validator 是硬编码的,只接受 test 和 test 作为用户名和密码,但即使我将 test2 传递给 SoapClient,操作仍然通过。