什么是OpenID Connect授权流程来验证移动应用用户?

PGl*_*son 20 openid mobile oauth openid-connect

我正在构建一个与RESTful API交互的跨平台移动应用程序,我想使用OpenID Connect对我的用户进行身份验证.我将构建自己的OpenID Connect提供程序服务器.

OpenID.net 声称:

OpenID Connect允许所有类型的客户端(包括基于浏览器的JavaScript和本机移动应用程序)启动登录流程并接收有关已登录用户身份的可验证断言.

但是,我找不到任何解释如何为移动应用客户端进行身份验证的文档.

此StackExchange答案清楚地表明OpenID Connect不支持"资源所有者基于密码的授权"流或"客户端凭据"流.

这只留下了"授权代码"流(通常由服务器端应用程序使用)和"隐式授权"流(通常由客户端应用程序使用).这两者似乎都依赖于将用户重定向到提供者的授权端点,并让提供者重定向回客户端URL.我不知道这如何适用于移动应用程序.

任何人都可以向我解释(甚至更好,请指教我或一些示例代码),这解释了如何做到这一点?

更新

澄清一下:OpenID Connect依赖于客户端将用户重定向到授权端点,然后提供者将用户重定向回客户端.在客户端不是Web应用程序的情况下,这怎么可行?

Jam*_*mes 16

移动应用程序(至少在iOS和Android上)可以注册自定义URL方案,以便来自浏览器的重定向可以将用户与一些查询参数一起发送回您的应用程序.

因此,您可以在本机移动应用程序中使用这些流程,但它涉及将用户发送到Web浏览器(外部浏览器应用程序或应用程序内置的Web视图),以便他们通过OP进行身份验证.

但是,我对这整个方法的看法是,由于您正在开发自己的OP服务器和您自己的原生移动应用程序,因此移动应用程序实际上是一个受信任的客户端,让用户直接在您的应用程序中输入用户名和密码没有任何问题. .我可以理解为什么OpenID Connect规范不支持这一点,因为它确实不是OIDC试图解决的问题,它可能会鼓励第三方应用程序请求用户直接输入用户名+密码.但是,我希望在规范中有更多关于此问题的指导,因为我面临着类似的情况,我不知道如何继续.

  • 不要忘记"受信任/拥有"应用中使用的第三方框架可能会访问用户输入的凭据.使用SFSafariViewController方法,为用户提供便利(即留在应用程序中)和安全性(应用程序无法看到输入的凭据),如果有多个应用程序/站点,它还提供SSO. (2认同)