Authentication 使用OAuth和/或OpenID开发RESTful API
我正在绞尽脑汁用多个外部令牌提供者实现OAuth或OpenID。从我的角度来看,像谷歌这样的提供商在一个api中混合了这两种规范,我在保护资源和处理用户数据的方式上区分了这两种机制。OpenID仅用于身份验证,我自己生成访问令牌并保存所有用户数据,而另一方面OAuth提供外部访问令牌并管理用户数据 所涉实体:Authentication 使用OAuth和/或OpenID开发RESTful API,authentication,oauth-2.0,oauth,authorization,openid,Authentication,Oauth 2.0,Oauth,Authorization,Openid,我正在绞尽脑汁用多个外部令牌提供者实现OAuth或OpenID。从我的角度来看,像谷歌这样的提供商在一个api中混合了这两种规范,我在保护资源和处理用户数据的方式上区分了这两种机制。OpenID仅用于身份验证,我自己生成访问令牌并保存所有用户数据,而另一方面OAuth提供外部访问令牌并管理用户数据 所涉实体: 外部提供程序-这是我对OAuth/OpenID提供程序(如Google OAuth)的称呼 后端-主要用作客户端RESTful API的服务器 客户端-需要访问后端提供的资源的应用程序(如
- 我不确定是否需要经常检查用户是否仍然是有效身份。对于有效标识,我的意思是外部标识(例如google用户)是否仍然存在,这基本上与我的持久层是否必须使该用户无效(删除)有关。换句话说,我必须将我的持久层与外部提供者同步,以避免死/不可用的身份。如果电子邮件地址等信息发生更改,而我的后端没有收到通知,则这一问题尤其严重。或者我应该接受这样一个事实,即我的后端中的用户只是通过id与外部用户相关,客户端必须自己管理其后端中的数据(例如,在客户端更改其电子邮件)。这意味着我更愿意忽略(在提供者)对外部用户数据的任何更改
- 我假设刷新过程必须在客户端执行,以防令牌过期时后端重定向未经授权的提供者。对吗
- 如何确定令牌来自哪个提供程序。对我来说,实现一个试错过程并询问每个提供者这是否是一个有效的令牌似乎很奇怪。例如,如果后端接收到请求头中的访问令牌,它不知道该询问哪个提供者。(或者我应该像
那样在报头中编码此信息,以便知道在哪里检查访问令牌承载提供者令牌
- 使用选项2,外部提供程序遇到停机时,任何用户都无法使用我的后端,而使用选项1时,只有登录(初始登录或显式注销后,刷新令牌无效)不可用于此特定提供程序
我的主要问题是,考虑到似乎更适合我的场景的选项1,我是否必须对用户状态的任何状态更改做出反应,如外部提供商的电子邮件更改,或者忽略外部用户id以允许身份验证有任何缺点。修正OpenID,意识到我只需要身份验证,不需要授权,也不需要用户数据的严格耦合。在提出问题时,我意识到了区别,但是我没有深入挖掘我的项目的需求。因此,我放弃了基本的OAuth协议,因为我不需要对外部数据进行任何授权rces 关于OpenID,来自OpenID提供商的外部身份管理不在协议范围内,必须独立完成。还有其他协议和方法处理此问题,例如 我最终依赖于id_令牌提供的外部id是唯一的这一事实,并在第一次身份验证(基本上是注册)时初始化一次性映射。我的服务器从此开始管理用户数据。后续的身份验证请求依赖于以下事实: