背景
- 我们开发了一个Web应用程序,其中包含使用oauth2/oidc的rest-api以及对第三方应用程序的支持
- 我们为android和ios开发了自己的原生应用程序.目前,他们从用户凭据流中检索长期存在的令牌(无需同意屏幕).
- 我们目前正在扩展我们的身份验证流程,以便通过google/office365接受外部登录.通过在授权代码/隐式oauth流中指定acr值也可以支持这一点.
问题/问题
- 我们当然希望能够完全信任我们的原生应用程序,而不是显示同意屏幕以获得最佳用户体验.在使用授权代码/隐式流程时,虽然没有任何内容可被视为秘密,但如果未显示同意屏幕,则恶意黑客可能潜在地利用(无需用户知识)用户.
- 我们如何避免必须为我们自己的原生应用程序显示同意屏幕,同时仍然确保用户尽可能安全?
怎么解决?
- 执行单独的office365/google登录以从此idp检索刷新令牌,然后使用此令牌实现一种公开身份验证的方法,以从我们的webapp中检索长期令牌.
- 简单地忽略安全漏洞,永远不要求用户同意,因为`clientId/clientSecret/redirectUrl`的非秘密组合以及"很难破解这个"的借口.
- 如果以"google/office365"为借口进行外部登录,无论如何在请求刷新令牌时都会显示同意屏幕,则忽略安全漏洞.
- 一些未知的方法,以确保它不是一个恶意的应用程序/用户
我不喜欢上述(1)的原因是它在我们的webapp中打开了一个新的认证流程,并迫使本机应用程序实现更复杂的认证流程.
这里有什么东西我不见了,什么是最佳做法?