gpt4 book ai didi

security - 基于 token 的安全策略和注意事项

转载 作者:行者123 更新时间:2023-12-02 09:12:23 26 4
gpt4 key购买 nike

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

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

  • HTML 客户端(使用 jQuery/AJAX 的单页应用程序 (SPA))
  • Android 应用
  • Silverlight 客户端
  • Windows 客户端
  • Windows Mobile 客户端

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

我找到了开源项目IdentityServer v2 from ThinkTecture成为我的解决方案的一个良好且灵活的安全 token 服务(STS)。它支持多种 token 类型、协议(protocol),并且具有高度可扩展性,并且如果需要,还具有基于 ASP.NET 成员(member)数据库的自包含身份提供程序 (IdP)。

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

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

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

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

WS Federation 可以成为我的 friend 吗?

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

现在我的问题:

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

最佳答案

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

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

被动适用于浏览器。它包含在 302 中发送给身份提供商,身份提供商又将 SAML token POST 回调用者。然后由 cookies 支持身份验证。

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

我认为,如果您的客户端不支持 WCF 联合身份验证绑定(bind) (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

关于security - 基于 token 的安全策略和注意事项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20369604/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com