1

我在论坛上搜索了一些资源:

我正在思考关于实现单点登录/基于令牌的身份验证过程的想法。粗略地说,要求是:

  • 用户网络应用程序/移动应用程序/移动网络等
  • 系统一:用户信息和登录信息,生成token并提供一些服务(例如getUserData
  • 系统 2:控制用户特定数据的外部方
  • 系统 3:又一个外部方,如系统 2
  • 用户只需在系统 1 登录一次,即可与系统 2 和系统 3 通信

想想银行,或者像 Mint.com 这样的东西,在初始设置之后,用户可以通过 Mint 登录一次,然后可以访问您的银行(可能还有多个银行机构) - 从而通过一次登录访问不同的系统. 然而,就我而言,这不仅仅是 Mint.com 所做的只读访问。

我最初的想法大致是这样的:

User Sign In ----> System 1, login verification generate token for itself (call it token1)
System 1 ---> generate token and pass it to System 2 (call it token2)
System 1 ---> generate token and pass it to System 3 (call it token3)
System 1 ---> return [token1, token2, token3]

从这里开始,用户(即应用程序或网站等)拥有 3 个可用于通信的令牌。如果用户需要从系统 1 执行操作/检索数据,它将与请求一起传入令牌 1,等等与系统 2 和系统 3

这种方法有意义吗?

这当然存在安全问题——如果代币在途中的某个地方被盗,现在拥有该代币的人可以在代币所用于的系统上执行操作——显然,这对银行系统之类的东西来说是不利的。

系统如何验证提供令牌的请求发送者实际上是为其生成令牌的合法用户?

一种想法是第二个身份验证级别,即。对于用户提出的每个请求,它都需要输入一个特殊代码(例如,您的银行卡 PIN 码)才能与请求中的令牌一起使用 - 但这不会让人讨厌吗?每个请求,用户都必须输入一个 PIN。

想法和评论将不胜感激。

编辑: 我已经看过 OAuth ... 据我了解,您需要实现一个 OAuth 提供程序来生成令牌并允许您将它与 OAuth 提供程序本身一起使用,换句话说,OAuth 提供程序是 System # 1 - 但我怎样才能让系统 2 和 3 也接受该 OAuth 令牌?或者我可能误解了 OAuth。

此外,即使使用 OAuth 可以按照我想要的方式工作(系统 1、系统 2、系统 3 等),问题仍然存在:如果外部恶意方获得了对该令牌的访问权怎么办?如何识别以确保使用令牌的人是授权方?

4

1 回答 1

3

“这种方法有意义吗?”

如果你问如何在 StackOverflow 上发明健壮的身份验证方案,那么根据定义,你没有资格发明一个健壮的方案。事实上,我认为该领域的任何一位专家目前都没有能力这样做。

这是一个你无法重新发明的轮子。使用 OpenID/OAuth 或 Kerberos 或类似的东西,让专家团队分析它们的弱点,你和我都无法理解。

于 2012-07-30T20:36:24.470 回答