oAuth2移动应用程序授权

oAuth2移动应用程序授权,oauth,permissions,oauth-2.0,jwt,Oauth,Permissions,Oauth 2.0,Jwt,我正在构建一个连接到RESTAPI的本机移动应用程序。 我将此作为身份验证/授权层的指南 当用户第一次访问应用程序时,我想为他们提供用户名和密码框。 在他们点击submit之后,我希望向应用程序提供一个访问令牌,以及一个允许用户执行的权限(范围?)列表 我已经读了很多关于oAuth2规范的书,但是对于使用哪个流感到困惑 我无法使用资源所有者密码凭据授权,因为我无法信任具有客户端密码的本机应用 我不想使用隐式授权,因为我不想向用户显示“您是否授权此应用?”web窗口 我已经研究了JWT承载流,认为

我正在构建一个连接到RESTAPI的本机移动应用程序。 我将此作为身份验证/授权层的指南

当用户第一次访问应用程序时,我想为他们提供用户名和密码框。 在他们点击submit之后,我希望向应用程序提供一个访问令牌,以及一个允许用户执行的权限(范围?)列表

我已经读了很多关于oAuth2规范的书,但是对于使用哪个流感到困惑

我无法使用资源所有者密码凭据授权,因为我无法信任具有客户端密码的本机应用

我不想使用隐式授权,因为我不想向用户显示“您是否授权此应用?”web窗口

我已经研究了JWT承载流,认为它可能是我所需要的,因为它不需要客户ID/密码。但是,我找不到这个流返回用户可以执行的权限(作用域?)的任何示例

编辑#1:

我对范围的使用感到困惑。说明书上说-

授权服务器可以完全或部分忽略范围 客户端根据授权服务器策略或 资源所有者的指示。如果颁发的访问令牌作用域 与客户端请求的授权不同 服务器必须包含“scope”响应参数以通知 授予的实际范围的客户

如果客户端在请求时忽略了scope参数 授权,授权服务器必须处理 使用预定义的默认值请求或请求失败 指示无效的作用域。授权服务器应该 记录其范围要求和默认值(如果定义)

我的客户机可以从中请求所有作用域的列表,然后授权服务器用用户实际拥有的作用域给出响应吗


感谢您的帮助,Tom。

您列出了关于OAuth 2.0流的两个不正确的假设:

  • 资源所有者密码凭据授权可用于公共客户端,即没有客户端密码的本机应用

  • 默示授权的使用并不意味着它需要明确的同意;这取决于授权服务器的实现;在企业设置或同一方控制客户机和授权服务器的设置中,这一点可以忽略

但由于隐式授权附带了安全考虑,因此对于本机应用程序,通常最好使用授权码授权


作用域是客户端请求特定权限的一种方式。资源所有者可以授予与这些作用域相关的客户端权限(显式或隐式)。由于客户机将根据其获得的权限更改其行为,因此假定客户机、资源服务器和授权服务器之间对与哪些作用域相关有一些共同的理解。OAuth 2.0规范中没有预定义的语义,这取决于实现。

感谢您的回复。我稍微编辑了一下这个问题,以澄清关于范围我想要实现的目标。我理解所有层都需要同意每个范围的含义。我的困惑与最初的拨款申请中如何处理范围有关。我又看了一遍授权码,又看了一遍隐式授权。我看到的每个示例似乎都向用户展示了第三方用户名/密码框,这不是我想要的。我真的需要用户名和密码由本机应用程序(而不是web窗口)捕获。你还认为这是可能的吗?他们有什么例子吗?