抱歉...我想完全重新表述这个问题:,我已经问过了同一个问题关于信息安全
我正在开发的系统将有一个移动应用程序、一个网络门户和一个基于 HTTP 的 API。
我似乎无法找到答案的问题是:
我是否需要实现 openid connect 和/或 oauth 令牌端点并生成令牌以供客户端访问我的API?或者我是否“以某种方式”允许客户端使用用户的 open-ID 提供商颁发的令牌来访问 API?
更多背景:
我希望允许用户使用他们的 Google/Facebook ID 注册和登录。
在 API 中,我存储了一个带有一些属性的用户表,这些属性很少,因为我不需要更多,但本质上:
表用户:
- uid
- real_name
- contact_number
- email_address
- is_active
- have_admin_rights
我还将为用户的 open-id 设置一个表,如下所示:
表 open_ids:
- uid
- user_id (引用 users(uid)
- open_id
(这样用户就可以使用任何他们想与其账户关联的 Open-ID)
在其他地方我引用了用户 ID,例如:
表 foo:
- uid
- bar
- bla
- last_modified_by_user_id (引用用户(uid))
目前,在我的测试设置中,我有一个“密码”表,例如:
表密码:
-uid
-user_id(参考用户(uid))
-password_hash
(注意:我们的想法是尽快摆脱这个表,改用 open_id。但我选择哪个库很大程度上取决于我实现的功能以及我从外部来源使用什么)
我了解到我需要存储访问令牌,因为我不想复制已经存在于社交服务资料中的用户数据,并且需要不时访问每个用户的这些服务。但是我如何从客户端(用户注册的地方)获取访问令牌到 API(这是各个客户端之间的共享资源)
问题实际上并不在于将令牌从客户端发送到 API - 我只需在 API 中有一个函数来“注册”用户和一些其他端点,以便在用户进行身份验证时使用。问题是访问令牌仅适用于一个特定的客户端。
假设我没有实现授权服务器但可以以某种方式使用来自谷歌等的服务:在开发者网站上,例如对于谷歌、脸书,我可以注册我的客户端并获得客户端机密/客户端 ID,但我是否使用来自客户端和 API 的相同客户端凭据?
或者也许客户端凭据仅由 API 保存,而前端服务在用户注册时依赖 API 作为中间步骤?这感觉非常危险,不安全。那么在 OpenID 提供商眼中,API 是另一个单独的客户端吗?
假设我确实需要实现授权服务器,我是否也需要成为 open-id 提供商?在这种情况下,似乎必须是 openid-connect,因为我确实需要同时进行身份验证和授权。但在这种情况下,我真的不知道如何执行新用户注册,而之前的问题并没有真正消失。似乎我应该能够让客户端连接并从 Open IdP 获取用户身份验证/访问和 ID 令牌,然后使用 API“注册”用户。