我开始设计 REST Web 服务,但不清楚最佳身份验证方法。该服务将允许个人用户访问/管理他们自己的数据,因此需要某种类型的用户身份验证。我一直在研究这些选项:
- 身份验证
OAuth 似乎更多的是关于授权而不是身份验证。我计划在服务中本地处理授权,所以我不是在寻找解决方案。但是,OAuth 是否也适用于身份验证?
- 开放ID
OpenID 确实提供了一种身份验证解决方案,但这更适合于允许用户使用他们的第 3 方凭据(Google、Yahoo 等)。虽然我愿意支持这一点,但这不是我主要关心的问题,我会绝对允许用户使用本机凭据(电子邮件/密码)进行注册。
- HTTP 基本身份验证
这很容易实现,但据我了解,这可能不是一个非常安全的方法。此外,似乎需要为每次访问交换凭据,但我更希望用户进行一次身份验证,然后通过会话令牌继续访问。
- 自定义身份验证
基本上,推出我自己的登录/令牌生成服务,并需要一个有效的令牌来访问所有其他资源(显然,一切都将通过 SSL)。
除了创建 Web 服务之外,我还将构建一个代表用户使用这些服务的客户端(Web)应用程序,但我不希望该应用程序必须存储用户信息/凭据/等。所以,像这样:
用户(使用电子邮件/密码或第 3 方凭据进行身份验证)--> Web 应用程序(使用应用程序 ID 进行身份验证)--> Web 服务
再一次,我希望其他人也可以构建客户端,所以中间层可以是任何 3rd 方应用程序:
用户(使用电子邮件/密码或 3rd 方凭据进行身份验证)--> 3rd 方应用程序(使用应用程序 ID 进行身份验证)--> Web 服务
我的最高要求是:
- 安全(显然)
- 本机凭据
- 支持第 3 方凭据(Google、Yahoo、LinkedIn 等)
- 支持多个客户端(Web 应用程序、移动应用程序、第 3 方应用程序等)
- 客户端凭据(只是一个应用 ID?)
- 过期的登录会话
- 不需要授权
所以,我的问题是,基于上述(如果这太模糊,请告诉我),是否有“最佳”方法?OAuth 或 OpenID 是否合适,或者我是否让这太复杂了,而应该只滚动我自己的身份验证?
编辑:
我想我需要实现以下内容:
1)本机凭证/令牌(基于 SSL 的 HTTP 基本身份验证?)
2) 一个 OpenID“依赖方”,允许我的 api 使用托管在其他地方的 OpenID(即“支持第 3 方凭据”)
3) 一个 OAuth“消费者”,允许我的 api 访问 3rd 方服务(如访问用户的 LinkedIn 个人资料)。
4) 一个 OpenID“提供者”,允许人们在别处使用 api 的原生 ID(可选)
5) 允许第 3 方应用程序代表用户访问我的 API 的 OAuth“提供者”(可选)
这看起来是对的,还是我让它变得比需要的更复杂?