Oauth 当redirect#u uri不'时,应用程序是否有OpenID Connect授权类型或机制来轮询验证代码;你不申请吗?
如果您有一个设备上的应用程序(例如桌面程序、移动设备应用程序),您可以使用OpenID Connect并附带一些注意事项: 使用资源所有者凭据(Oauth 当redirect#u uri不'时,应用程序是否有OpenID Connect授权类型或机制来轮询验证代码;你不申请吗?,oauth,oauth-2.0,openid-connect,Oauth,Oauth 2.0,Openid Connect,如果您有一个设备上的应用程序(例如桌面程序、移动设备应用程序),您可以使用OpenID Connect并附带一些注意事项: 使用资源所有者凭据(grant\u type:password)是最简单的,但如果身份验证服务器运营商由于信任原因(即,他们不希望您自己收集用户的用户名+密码)而不允许您使用该授予类型,则可能无法使用该凭据-或者如果他们有一个在本地应用程序中很难复制的动态或自定义身份验证UI 通过交互流(隐式、混合),身份验证服务器的身份验证页面显示在应用程序内的web视图中。大多数用户都
grant\u type:password
)是最简单的,但如果身份验证服务器运营商由于信任原因(即,他们不希望您自己收集用户的用户名+密码)而不允许您使用该授予类型,则可能无法使用该凭据-或者如果他们有一个在本地应用程序中很难复制的动态或自定义身份验证UI
通过交互流(隐式、混合),身份验证服务器的身份验证页面显示在应用程序内的web视图中。大多数用户都不知道应用程序可以窥探身份验证页面并捕获他们的用户名和密码,尤其是在移动设备上——但通过这种方式,应用程序代码可以轻松捕获授权代码和/或访问令牌,并自动关闭web视图,而无需任何额外的用户交互。(我很惊讶,我还没有听说有更多的用户详细信息被恶意应用程序以这种方式捕获的案例。)
…因此,建议始终使用系统的web浏览器打开身份验证页,但在Windows桌面上,系统web浏览器没有良好的标准方式将服务器响应返回到应用程序代码,尽管目前使用的方法有很多:
- “身份验证成功”页面指示用户将一组文本(包含授权代码或
response)复制并粘贴回桌面应用程序access\u令牌
- 按照上面的说明,在应用程序托管的web视图中显示页面
- 如果身份验证过程始终只需要用户名和密码(例如),应用程序仍然可以使用自己的UI捕获用户的用户名和密码,然后发出自己的HTTP请求,使其看起来像用户的web浏览器会话,并通过这种方式获取授权码和/或
访问令牌
- 仅在Windows上:
- 有一个小的实用程序
,当调用该程序时,它会将其命令行参数转发到用户会话中的命名管道authHelper.exe
- 主客户端应用程序将在每用户
键中注册HKCU\Software\Classes
作为临时URI方案处理程序,例如authHelper.exe
,以便将任何my application:
URI的内容作为参数传递到my application:
authHelper.exe
- 传递给系统web浏览器以打开身份验证页的URI将
参数设置为重定向\u URI
,因此用户在浏览器中进行身份验证后,浏览器将请求由Windows处理的自定义URI方案,该方案调用我的应用程序:
,然后通过命名管道将数据发送到正在运行的应用程序authHelper.exe“access\u token=…”
- 如果用户没有权限写入自己的
密钥,或者如果用户使用的Windows版本不支持带有EXE注册的自定义URI方案处理程序,则此操作不起作用HKCU\Software\Classes
- 有一个小的实用程序
- Windows UWP应用程序也可以使用Web身份验证代理
状态:pending
,但最终,在用户在超时窗口内成功进行身份验证后,应用程序的轮询请求将指示一次成功的尝试,并且还包含access\u令牌
或适用的授权代码。如果用户未能进行身份验证(例如,3次不正确的尝试)或让窗口打开足够长的时间导致超时,则轮询响应将指示失败