对不起….我想彻底改写这个问题:,我现在就提出了关于信息安全的同样的问题
我正在使用的系统将有一个移动应用程序,一个Web门户和一个基于HTTP的API。
我似乎无法find答案的问题:
我是否需要实现openid连接和/或oauth令牌端点并为客户端生成令牌以访问我的 API? 或者,我“以某种方式”使客户端使用用户的开放式ID提供商发布的令牌来访问API?
更多背景:
我想让用户能够使用他们的Google / Facebook ID进行注册和login。
在API中,我存储了一些具有一些属性的用户表,因为我不需要比这更多,但本质上:
表用户:
– 呃
– 真正的名字
– 联系电话
– 电子邮件地址
– 活跃
– have_admin_rights
我还会为用户的开放式ID设置一个表格,如下所示:
表open_ids:
– 呃
– user_id(引用用户(uid)
– open_id
(以便用户可以使用他们想要与其账户关联的任何Open-ID)
在其他地方,我引用用户ID,例如:
表foo:
– 呃
– 酒吧
– bla
– last_modified_by_user_id(引用用户(uid))
目前,在我的testing设置中,我有一个“密码”表,例如:
表密码:
– 呃
– user_id(引用用户(uid))
– password_hash
(注意:这个想法是尽快摆脱这个表,并使用open_id代替,但是我select的库很大程度上取决于我实现的function以及我从外部使用的function)
我收集到我需要存储访问令牌,因为我不想复制已经在其社交服务configuration文件中的用户数据,并且需要不时地为每个用户访问这些服务。 但是,如何从客户端(用户注册的地方)获取访问令牌给API(这是各个客户端之间的共享资源)
这个问题并不是真的从客户端向API发送令牌 – 我可以在API中有一个函数来为注册一个用户和其他一些terminal用户进行身份validation。 问题是访问令牌仅适用于一个特定的客户端。
假设我不执行授权服务器,并以某种方式可以使用从谷歌等服务:在开发人员的网站,例如谷歌,脸谱,我可以注册我的客户端,并发出客户端的秘密/客户端ID,但然后我使用来自客户端和API的相同客户端凭证?
或者,也许客户端凭证只能被API保存,前端服务依赖于API作为用户注册的中间步骤? 这对于不安全感来说是非常危险的。 那么在OpenID提供商的眼中,API又是一个独立的客户端吗?
假设我确实需要实现一个授权服务器,我是否也需要一个开放标识提供程序? 在这种情况下,它似乎必须是openid连接,因为我需要同时具有身份validation和授权。 但在这种情况下,我真的迷失在如何执行新的用户注册,而以前的问题并没有真正消失。 看来我应该能够让客户端连接并从Open IdP获得用户authentication/访问和ID令牌,然后用API“注册”用户。