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