我正在使用一个命令行实用程序,该实用程序需要通过REST API访问后端服务器。
我试图避免实施自己的身份验证机制,而使用一种(或多种)公共(public)身份验证服务(例如Google,Facebook,亚马逊)。
我正在尝试使客户端接受凭据并针对身份验证提供程序进行身份验证,而无需要求用户打开Web浏览器并提供 token 即可。客户端将是开源的,以避免信任问题(即,用户凭据不会发送到我的后端服务器)。
我对授权不感兴趣,我只关心对后端服务器进行身份验证,而无需让用户保留另一组凭据(也无需将用户凭据发送到后端服务器)。
我如何让我的客户端通过auth提供商进行身份验证并获得 token 以与服务器进行通讯,而无需用户使用Web浏览器?
最佳答案
我知道您说过“不打开网络浏览器”,但是如果该浏览器在另一台设备(例如其移动设备)上呢?
如果可以接受,则可以使用OAuth 2.0 for Devices方法,即向用户显示一个简短的字母数字代码,他们在http://google.com/device上输入该代码以验证来自另一设备的请求。该OAuth流程旨在在没有浏览器(如命令行)的环境中工作。
要查看此身份验证流程的演示,请访问YouTube TV网站,按键盘上的←键,然后选择“登录”。
您也可以轻松尝试一下-在developers console(类型为“已安装的应用程序”->“其他”)中创建OAuth客户端,并按照docs中的curl
示例进行操作(请确保将 token 请求中的演示code
替换为从初始请求到代码端点的device_code
)。使用任何示例JWT解码器(例如this one)对生成的id_token进行解码。
对于您的情况,您应该请求profile
范围,该范围将在 token 终结点调用的响应中返回id_token
,从中可以提取用户的Google个人资料ID(ID token 的sub
字段)。