【发布时间】:2019-05-02 23:26:34
【问题描述】:
我有一个使用 IdentityServer4 和 ASP.NET Identity 构建的 OpenID Connect 提供程序,运行在假设:login.example.com。
我有一个在假设spa.example.com 上运行的 SPA 应用程序,它已经使用我的 OpenID Connect 提供程序通过 login.example.com 对用户进行身份验证,并授权他们访问 SPA。
我有一个移动应用(两个平台上都是原生的),目前正在使用自定义身份验证系统。
我认为摆脱自定义身份验证系统会很好,而是允许我的用户使用他们在 SPA 上使用的相同帐户登录,即使用我的 OpenID 提供程序。
因此,我首先查看 OpenID 连接网站并重新阅读 RFC6749,经过几次 google 搜索后,我意识到这是一个常见问题,我发现 RFC8252(用于本地客户端的 OAuth2),也是客户端动态注册 (RFC7591) 和 PKCE (RFC7636)。
我挠了挠头,因为它可能会被泄露,所以不再可能在客户端/第三方(本机应用程序)上存储任何类型的“秘密”。
我与一些同事讨论了这个话题,我们得出了以下设置:
- 使用 Apple Universal Links 和 Android App Links 将域(例如
app.example.com)关联到我的移动应用。 - 为两个客户端使用 AuthenticationCode 流并强制它们使用 PKCE。
- 在应用关联域上使用
redirect_uri说:https://app.example.com/openid - 让用户在登录后始终同意登录应用程序,因为iOS或Android都不会通过自动重定向将应用程序带回,必须是手动单击通用/应用程序链接的用户每次。
我在两个应用程序上都使用了 AppAuth 库,现在在 test 上一切正常,但我想知道:
- 您认为这是防止任何具有适当技能的人冒充我的应用程序或通过任何其他方式未经授权访问我的 API 的安全方法吗?目前实现这一目标的最佳做法是什么?
- 有什么方法可以避免让用户总是“同意”(让他们实际点击通用/应用链接)。
- 我还注意到 Facebook 将他们的应用程序本身用作一种授权服务器,因此当我在应用程序上点击“使用 facebook 登录”时,我会进入一个 facebook 页面,询问我是否愿意“启动应用程序执行登录”。我想知道如何实现这样的目标,以允许我的用户使用我的应用程序(如果已安装)在手机上登录 SPA,就像 facebook 对他们的应用程序所做的那样。
【问题讨论】:
-
感谢您的宝贵时间。
标签: security mobile oauth openid-connect