3

我正在研究适合以下客户端/服务器方案的安全设置,并且我有几个问题/注意事项想与您分享。

情况:我在不同平台上有多个客户:

  • HTML 客户端(使用 jQuery/AJAX 的单页应用程序 (SPA))
  • 安卓应用
  • Silverlight 客户端
  • Windows 客户端
  • Windows 移动客户端

大多数相应的服务器组件都基于使用 REST 的 .NET WCF(但对于某些后端,我使用的是其他协议)。

我发现ThinkTecture 的开源项目 IdentityServer v2对我的解决方案来说是一个不错且灵活的安全令牌服务 (STS)。它支持多种令牌类型、协议,并且具有高度可扩展性,如果需要,它还具有基于 ASP.NET 成员资格数据库的自包含身份提供程序 (IdP)。

客户端使用用户名/密码的基本流程如下:

  1. 客户端对其服务器上的资源(需要授权访问)进行未经授权的 HTTP 调用
  2. 由于客户端尚未经过身份验证,服务器返回 HTTP 401(未经授权),在 HTTP Location 标头中向 STS 提供地址(请参阅下面的注释)
  3. 客户端在 HTTP Basic Auth 标头中将其凭据提交给 STS
  4. STS 返回一个包含所有相关用户声明的 JWT 令牌
  5. 客户端现在重复第 1 步的初始请求,包括 HTTP Auth Bearer 标头中的 JWT 令牌
  6. 服务器验证令牌,因为它源自受信​​任的 STS 源,并返回请求的资源

我知道第 2 步将 HTTP 401 错误消息与通常与 HTTP 3xx 状态代码关联的 HTTP Location 标头结合起来有点不正统。我需要 401 状态代码,因为我的 jQuery/AJAX 客户端会自动处理 302 重定向消息,而没有任何机会拦截重定向。

现在,系统需要使用外部 IdP。“内部”STS 被定制为将身份验证请求转发到外部 IdP 处理声明从外部 IdP 格式到内部格式的转换。一个问题是它暗示了“密码反模式”,但目前所有系统都是内部且值得信赖的。

WS Federation 可以成为我的朋友吗?

上述基本流程适用于所有客户端,无论是否基于浏览器。但对于特定的浏览器客户端,我一直在研究联合安全方案,让 IdP/STS 为客户端提供登录机制。我使用的 STS (IdentityServer) 可以配置为与符合 WS-Federation 的 STS 结合使用。因此,令牌会自动转换为目标令牌格式(在我的例子中,例如从外部 STS 的 SAML 令牌到内部 JWT 令牌)。有了这个,我可以拥有某种 SSO 机制。

现在我的问题:

  1. 我描述的基本安全流程是最优的吗?
  2. WS-Federation 是否仅适用于浏览器客户端?
  3. 如果没有,它如何与我的 android 客户端一起使用?
  4. 在具有更多 STS 的 WS-Federation 中,以下之间的通信流程如何:客户端 - 内部 STS - 外部 STS(在 HTTP 通信、cookie 和其他方面)。
4

1 回答 1

2

我认为您所描述的不是 WS-Fed。WS-Fed 从不涉及 401,也从不涉及身份验证标头。

WS-Fed 有两个版本,被动和主动。

被动适用于浏览器。它包含在 302 到身份提供者,而身份提供者又将 SAML 令牌发布回调用者。然后,cookie 支持身份验证。

Active 用于活动客户端(应用程序)。它包含在 SOAP 响应中,该响应指示调用者前往身份提供者获取令牌。来自身份提供者的 SOAP 响应包含一个令牌,然后将其提供给服务。

我认为,如果您的客户端不支持 WCF 联合身份验证绑定 (wsTrustFeb2005),则活动场景会非常复杂。您必须自己实现流程。

我想推荐的是 OAuth2 流程。OAuth2 有 4 种不同的流,其中两种对应 WS-Federation 的主动和被动:授权码流用于基于浏览器的应用程序,隐式流用于桌面/移动应用程序。

http://aaronparecki.com/articles/2012/07/29/1/oauth2-simplified#authorization

OAuth2 很容易与 WebAPI 服务集成,并且在 DotnetOpenAuth 库中有很好的支持。

Pro ASP.NET WebAPI Security 一书中详细描述了此和其他身份验证/授权选项

http://www.amazon.com/Pro-ASP-NET-Web-API-Security/dp/1430257822

即使您不打算围绕 WebAPI(而是您提到的 RESTful WCF)构建后端,本书也会为您提供 OAuth2 的必要背景知识。

另一方面,如果你仍然坚持 WS-Federation,这本免费的电子书描述了主动和被动两种场景:

http://msdn.microsoft.com/en-us/library/ff423674.aspx

于 2013-12-11T21:05:41.077 回答