如何在移动应用程序和Webview之间共享身份验证?

ALT*_*LMA 3 oauth-2.0 openid-connect

我想知道并试图找到一种解决方案,在没有任何用户交互的情况下使用相同的身份验证会话或相同的用户在移动应用程序中打开 webview。

现在我已经使用 Oauth 实现了移动设备登录,但如果我不知道如何使用正确的解决方案来实现上述方法。

我有一些解决方案,但不确定这是最佳实践并且有利于安全。

  1. 我将使用与应用程序中的按钮不同的移动应用程序的新客户端生成授权 URL,但在这种情况下,如果用户不知道,则有机会允许用户使用不同的帐户登录。它会导致移动视图和网络视图之间不匹配。

  2. 如果 webview 的强制登录有效,我将传递 id_token 并让 webview 使用公钥验证 id_token。

仅供参考,我也实现了 OIDC,但肯定不是我可以用它来支持这种情况。

Gar*_*her 6

Web 视图是私有浏览器会话,因此通常不会记住用于移动登录的 SSO cookie,从而导致双重登录。如今,将 Web 视图迁移到本机视图是首选,尽管在某些情况下这可能需要大量工作。

随机数模式

有一个有趣的 OAuth 模式可以使用。在调用 Web 视图之前,移动应用程序可以将其 ID 令牌作为证明发送到发出nonce. 这是一个短暂的(约 30 秒)随机值,只能使用一次。因此,可以将其作为查询参数发送到 Web 应用程序。

当 Web 应用程序收到随机数时,它会发出 OpenID Connect 重定向,并在login_hint_token参数中提供随机数。中还提供了随机数自定义身份验证方法acr_values。随机数经过验证,成功后,将向 Web 客户端颁发一组新的令牌,其中包含来自移动客户端 ID 令牌的主题以及 Web 应用程序的范围和声明。

在我工作的 Curity,我们撰写了一篇关于这种安全设计模式的文章,一些读者可能会觉得有用。

概括

此模式将不同应用程序之间的令牌分开,并避免在浏览器 URL 中发送长期存在的令牌。ID 令牌引导会话,这是它的常见用途。

它还很好地处理了以下事实:OAuth 安全移动应用程序使用令牌,而基于浏览器的应用程序大多使用仅安全的 HTTP cookie。安全性也是合理的,尽管总是值得考虑威胁。