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