OAuth 2.0-移动应用程序登录的正确方式&;网站

OAuth 2.0-移动应用程序登录的正确方式&;网站,oauth,oauth-2.0,identityserver4,Oauth,Oauth 2.0,Identityserver4,我正在使用IdentityServer为移动(本机)应用程序和网站构建OAuth 2.0服务器。我想知道我应该在移动应用程序和网站中使用的正确流程 据我所知,“隐式”流与我注册为外部API(如Facebook)开发人员时得到的流差不多,当用户使用其Facebook帐户登录到我的网站时,他会进入一个Facebook登录页面,该页面会将他的令牌引导回我的网站。这对我来说似乎很安全,因为身份验证服务器将用户引用到回调url(至少对于网站) 到目前为止,我实现的是“资源所有者”流,它使用client\u

我正在使用IdentityServer为移动(本机)应用程序和网站构建OAuth 2.0服务器。我想知道我应该在移动应用程序和网站中使用的正确流程

据我所知,“隐式”流与我注册为外部API(如Facebook)开发人员时得到的流差不多,当用户使用其Facebook帐户登录到我的网站时,他会进入一个Facebook登录页面,该页面会将他的令牌引导回我的网站。这对我来说似乎很安全,因为身份验证服务器将用户引用到回调url(至少对于网站)

到目前为止,我实现的是“资源所有者”流,它使用
client\u id
及其密码验证服务器上的用户凭据。我看到的问题是,客户端id和密码存储在应用程序(可以反向工程)或网站javascript代码中

我读到这篇文章()时说,最好在我的API上创建一个登录方法,我的API将与auth服务器通信(因此客户端id和密码将只存储在它上面)

我想知道像Facebook或谷歌这样的公司是如何做到这一点的。他们在网站上有自己的登录名,并且他们向第三方开发者提供API访问权限——是什么阻止开发者对他们的用户进行Facebook登录认证,并且不受限制地使用他们的API

  • 正确的工作方法是什么?含蓄的罗
  • 用户登录到网站或应用程序后-如何记住他已登录?我是否将刷新令牌保存在应用程序/网站端

  • 我会使用隐式流,因为正如您所提到的,您无法在应用程序中保证密码的安全

    因为您的后端是无状态的,所以您需要在每个请求中发送一个令牌(ID令牌或访问令牌)。后端处理的流(例如授权代码)不适合无状态API

    如果您只想对用户进行身份验证,我想您的后端会自行处理访问权限,而不依赖于访问令牌作用域。然后我将使用OpenID连接(OAuth2扩展)——只请求
    OpenID
    范围来获取ID令牌。ID令牌保证用户的身份,后端不必在OAuth2服务器上验证其有效性

    如果要在OAuth2服务器上为用户配置权限,前端应用程序将需要获取访问令牌。后端可以读取访问令牌的作用域

    在前端应用程序中保留令牌时,他们需要监视令牌有效期,并在当前令牌到期之前请求新令牌。您可以在
    /auth
    端点执行此操作(使用
    prompt=none
    URL参数)。有关更多信息,请查看


    对于OAuth2,重要的是要记住它是关于权限委托的。以谷歌为例,他们提供了一个OAuth2服务器和应用程序,该服务器和应用程序依赖于它发布的访问令牌。因此,如果第三方应用程序希望代表用户使用Google Plus,应用程序必须请求用户授予其访问Google Plus的权限(访问令牌范围)。用户可以在“同意”页面查看请求范围的列表,并且应用程序将不允许执行任何其他操作。考虑用户对应用程序的信任程度取决于用户。有关更多信息,请参阅。

    您想要OAuth2服务器做什么?只是身份验证?你也有后端吗?如果是,您想让它成为无状态的还是为登录用户保留一个会话?我需要OAuth2来验证web和移动中的用户。还有一个无状态的后端。你不会喜欢这个答案-但这是一个方法:@leastprivilege那么你是说他们应用程序中的Facebook登录是在网络视图中完成的?看起来不像。而且他们看起来不像是在使用隐式流,因为他们显然不需要请求用户对信息的权限。谢谢。但据我所知,隐式流不会使用我的应用程序登录屏幕-它会打开一个带有登录屏幕的浏览器-而且因为它是我的应用程序和我的后端,我希望他们在应用程序登录屏幕内输入用户名和密码。另外,隐式刷新令牌不起作用吗?我如何确保没有人以某种方式滥用我的API?只有您允许的应用程序(客户端)可以使用您的OAuth2服务器,因此,如果您的API收到OAuth2服务器颁发的令牌,它可以信任它。我知道这一点。但我担心的是,有人会将我的网站或移动应用程序的呼叫发送到服务器-接收我用于我的应用程序的客户端id的令牌,他将可以访问所有API,而不受我为第三方开发人员设置的限制。你是说某些攻击者会获得令牌吗?只有当您的通信(https)不安全,或者应用程序处理不正确,或者用户将其公开时,才会发生这种情况。前两个问题是你关心的,最后一个是不可能的——用户会自愿伤害自己。