我正在为我正在制作的网络应用程序开发一个身份验证系统。我想允许其他应用程序连接到我的应用程序中存储的数据(使用 OAuth 系统)。
我一直在阅读有关 OAuth 如何工作的文章:https://www.oauth.com/oauth2-servers/background/
大部分内容都有道理,但我确实有一个问题:
如何让用户不必授予对我自己的移动应用程序的访问权限?
换句话来说,如何让服务器自动向我的移动应用程序授予某些权限? 我假设其中一部分涉及为这些应用程序创建客户端 ID 和客户端 key ,就像其他应用程序一样,但我如何才能安全地绕过这些应用程序的授权?
我不确定我这样做是否正确,因为在我的 API 中,我有一个 signIn
端点,它接受用户名和密码并返回身份验证 token 。
我是否应该不使用 signIn
端点,而只使用一个 token 验证器,在 token 无效时将其移交给 OAuth 系统?
我知道这有很多问题,但我想解决这个问题,因为身份验证系统对安全性非常重要。
最佳答案
关于移动客户端的第一个问题,有 OAuth2 for Native Apps RFC其中讨论了该主题。简而言之,您应该使用 PKCE 的授权代码授予并刷新 token ,因此您的移动应用程序只需请求授权一次。为此,您的移动应用需要注册 OAuth2 客户端,并且 token
端点应配置为不需要 secret (因为您无法在移动应用中保守 secret )。
对于第二部分,OAuth2 协议(protocol)的好处之一是只有身份验证服务器才能获取用户凭据,而不是应用程序。它使凭证更难被泄露,并允许用户仅委派某些权限(范围)。因此,最好坚持一些基本的 OAuth2 流程(身份验证代码、隐式、混合),而不是使用您自己的端点进行身份验证。它将使您的应用程序更安全,甚至更容易使用(如果您使用类似 SSO 的东西)。
关于php - Oauth - 默认登录 token 应赋予什么类型的权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53947162/