Security 这个OAuth2本机应用程序流可以被认为是安全的吗?
我有一个OpenID连接提供程序,使用IdentityServer4和ASP.NET标识构建,运行在:Security 这个OAuth2本机应用程序流可以被认为是安全的吗?,security,mobile,oauth,openid-connect,Security,Mobile,Oauth,Openid Connect,我有一个OpenID连接提供程序,使用IdentityServer4和ASP.NET标识构建,运行在:login.example.com 我有一个SPA应用程序运行在SPA.example.com上,它已经使用我的OpenID连接提供商通过login.example.com对用户进行身份验证,并授权他们访问SPA 我有一个移动应用程序(在两个平台上都是本地的),目前正在使用自定义身份验证系统 我认为最好摆脱自定义身份验证系统,而是允许我的用户使用他们在SPA上使用的相同帐户登录,使用我的Open
login.example.com
我有一个SPA应用程序运行在SPA.example.com
上,它已经使用我的OpenID连接提供商通过login.example.com
对用户进行身份验证,并授权他们访问SPA
我有一个移动应用程序(在两个平台上都是本地的),目前正在使用自定义身份验证系统
我认为最好摆脱自定义身份验证系统,而是允许我的用户使用他们在SPA上使用的相同帐户登录,使用我的OpenID提供程序
因此,我开始查看OpenID connect网站,并重新阅读,在几次google搜索之后,我意识到这是一个常见问题,我发现(OAuth2用于本机客户端),还有客户端动态注册()和PKCE()
我对这样一个事实感到挠头:在客户端/第三方(本机应用程序)上不再可能存储任何类型的“秘密”,因为它可能会被泄露
我与一些同事讨论了这个话题,我们得出了以下设置:
app.example.com
)关联到我的移动应用程序重定向\u uri
,例如:https://app.example.com/openid
这里的威胁来自于有人在他们的设备上安装了一个恶意应用程序,该应用程序实际上可能会模拟你的应用程序。PKCE阻止另一个应用拦截从您的应用启动的合法登录请求,因此标准方法尽可能安全。每次强制用户登录/同意应该有助于让他们注意到正在发生的事情
从用户体验角度来看,我认为最大限度地减少使用基于浏览器的登录流的情况非常有意义。我会利用平台的安全功能(例如,iOS上的secure enclave),在用户以交互方式登录后,在其中保留一个刷新令牌,然后他们可以使用PIN、指纹或人脸等进行登录。我认为最好摆脱自定义身份验证系统,而是允许我的用户使用我的OpenID提供商,使用他们在SPA上使用的相同帐户登录。 这是OAuth 2.0和OpenID Connect为您提供的。在不同服务之间使用单个用户标识的能力。所以这是正确的方法 不再可能在客户端/第三方(本机应用程序)上存储任何类型的“机密”,因为它可能会被泄露 对。从OAuth 2.0规范的角度来看,这些被称为。不建议将客户机密与之关联。相反,授权代码、应用程序ID和重定向URL用于验证身份提供程序中的令牌请求。这使得授权码成为一个有价值的秘密 使用苹果通用链接和安卓应用程序链接,将一个域(比如app.example.com)与我的移动应用程序关联。 不是移动专家。但是,自定义URL域是处理OAuth和OpenID Connect重定向的方法 此外,使用PKCE也是正确的方法。因此,在浏览器(用户代理)中发生重定向时,可能会有恶意方获取授权代码。PKCE通过引入一个不会暴露给用户代理(浏览器)的秘密来避免这种情况。机密仅用于令牌请求(直接HTTP通信),因此是安全的 Q1 在PKCE中使用授权代码流是OAuth规范推荐的标准最佳实践。这对于OpenID Connect也是有效的(因此它构建在OAuth 2.0上) 需要注意的一点是,若您相信PKCE机密可以被利用,那个么它实际上意味着设备被破坏了。考虑从操作系统内存中提取秘密。这意味着系统被破坏(病毒/键盘记录器或我们所说的)。在这种情况下,最终用户和您的应用程序有更多的事情需要担心 此外,我相信这是一个商业应用程序。如果是这样的话,您的客户肯定会有他们设备的安全最佳实践指南。例如安装病毒防护和限制应用程序安装。为了防止上述袭击,我们将不得不依赖这些安全设施。OAuth2.0本身是不安全的。!这就是为什么会有最佳实践指南和政策 Q2 我对此不清楚。“同意”页面由身份提供程序显示。它会的