我正在构建一个连接到REST API的本机移动应用程序。 我正在查看此demo oAuth App以用作我的身份验证/授权层的指南。
当用户第一次来到应用程序时,我想为他们提供用户名和密码框。 在他们点击提交后,我想向App提供访问令牌,以及允许用户执行的权限列表(范围?)。
我已经阅读了很多有关oAuth2规范的内容,但对于使用哪种流程感到困惑。
我无法使用资源所有者密码凭据授予,因为我无法信任具有客户端密钥的本机应用。
我不想使用隐式赠款,因为我不想向用户展示"您是否授权此应用?"网页。
我已经查看了JWT承载流程,并认为它可能是我需要的,因为它不需要客户端ID /密钥。但是,我无法找到此流程返回用户可以执行的权限(范围?)的任何示例。
编辑#1:
我对Scope的使用感到困惑。规范说 -
授权服务器可以完全或部分忽略范围 客户端请求,基于授权服务器策略或 资源所有者的说明。如果发出访问令牌范围 与客户要求的授权不同 服务器必须包括"范围"响应参数通知 授予实际范围的客户。
如果客户端在请求时省略了scope参数 授权,授权服务器必须要么处理 请求使用预定义的默认值或请求失败 表示无效范围。授权服务器应该 记录其范围要求和默认值(如果已定义)。
从那可以我的客户端请求所有范围的列表,然后授权服务器给出一个用户实际拥有的响应?
感谢你的帮助,汤姆。
答案 0 :(得分:2)
您列出了两个关于OAuth 2.0流的假设:
资源所有者密码凭据授权可以与公共客户端一起使用,即不具有客户端密钥的本机应用程序
使用隐性补助金并不意味着它需要明确同意;这是授权服务器实现的自由裁量权;在企业设置或同一方控制客户端和授权服务器的设置中,可以省略
但是,由于隐式授权带有安全性考虑,因此对于本机应用程序,通常最好使用授权代码授权。
范围是客户端请求某些权限的一种方式。资源所有者可以授予客户端与这些范围相关的权限(显式或隐式)。由于客户端将根据其获得的权限更改其行为,因此假定客户端,资源服务器和授权服务器之间有一些关于与哪些范围相关的共享理解。 OAuth 2.0规范中没有预定义的语义,这取决于实现。