我知道这个问题似乎与这里的其他儿子相似,但我已经尝试了这里发布的答案:使用Azure ACS 2.0保护WCF 4.5服务
和这里:Azure上WCF REST/html服务的联邦身份验证(单点登录)
两者似乎都不相关。
这是我到目前为止写的。
- 具有各种worker角色的azure云服务,以及具有REST和SOAP端点的WCF web角色
- 一个有几个用户的azure活动目录帐户
- ACS名称空间。
WCF服务将被几个不同的公司使用,但除此之外是关闭的。我们选择azure活动目录为wcf服务和其他应用程序提供SSO。
我想这样做:
- 为使用WCF服务的每个公司创建用户/密码Azure Active Directory.
- 只允许拥有有效用户名和密码对的公司获得访问令牌
- 让每个公司使用他们的令牌来访问WCF方法。
我并不认为这很难完成,但是所有的教程似乎都是针对IIS托管或带有控制台应用程序的自托管服务的。
到目前为止我做了什么:
- 在azure活动目录中添加WCF服务作为集成应用程序
- 在ACS中创建一个名为testad的新身份提供者,并将WS-Federation元数据从集成的应用程序添加到该提供者
- 添加了一个使用新创建的testad身份提供程序的依赖方应用程序
- 添加一个带有直通规则的规则组,该规则使用testad Identity Provider和默认设置。
详细信息请参见选项1。我需要知道我所做的是否接近正确,如果是,我如何让WCFservice开始使用这些设置。
其他信息:
- WIF 4.5
- VS2012 Pro c#
更新:为了增加更多的信息,许多不同的网站都在发布WCF服务。我们的每个客户都会从他们自己的web表单中收集数据,然后使用c#代码添加服务引用,或者如果他们使用php,则通过curl之类的东西将数据发布到url。服务同时具有rest端点和soap端点。例如,他们将向mynamespace.cloudapp.net/myservice.svc/servicemethod发送XML或SOAP请求。我要么希望他们发送他们的用户名和密码与该请求,并验证这些凭据在实际的WCF方法,或让他们请求一个身份验证令牌,然后发送该身份验证令牌与他们的请求。
更新2 我想我找到丢失的那块了。为了使用活动目录作为身份提供者,看起来我需要设置一个ADFS服务器。我曾认为ADFS服务器已经设置了azure活动目录帐户,但显然情况并非如此?有没有办法做到这一点没有ADFS服务器?
您没有涉及的主要问题是how will these companies use that WCF service?
。通过您的门户网站,还是通过富客户端(如WinForms/WPF)?
如果是富客户端,你可以看看这篇博文?它向您展示了如何使用令牌保护WCF服务,以及如何从WPF应用程序访问该服务。
如果您计划只允许通过web门户访问WCF服务,那么图片就有点不同了。您可以首先通过Azure AD保护您的门户并获取用户令牌。然后使用该令牌对WCF进行身份验证。
但是在真正的web场景中,将调用服务的client
实际上是your web server
。如果是这种情况,我会用Azure AD保护我的门户网站。然后用一个访问令牌保护我的WCF。我可以从Azure AD访问控制中的服务标识获取该令牌。并提供此"服务令牌"作为来自web server
的每个WCF调用的一部分。为了增加审计(和遵从性),我还将发送原始用户令牌,以跟踪谁在何时访问了什么内容。