【问题标题】:Oauth2 : how and where to store client id and secretOauth2:如何以及在哪里存储客户端 ID 和机密
【发布时间】:2020-02-06 11:59:08
【问题描述】:

我有一个授权服务器,我的客户端是一个 Angular 应用程序。我不是第三方应用程序。 我使用了这个 symfony 捆绑包https://github.com/trikoder/oauth2-bundle 我正在使用授权类型password

{ "grant_type":"password", "client_id":"myclientid", "username":"john@doe.com", "password":"foo", "client_secret":"3d4a940.....3c1ea38b5" } 回应是:

{ "token_type": "Bearer", "expires_in": 60, "access_token": "eyJ0eXAi....nK0Ag", "refresh_token": "def50200dfce4da3....fdc689e5" }

access_token 的有效期只有 1 分钟,之后客户端需要使用刷新令牌才能与我的 api 对话:

{ "grant_type":"refresh_token", "client_id":"myclientid", "client_secret":"3d4a940.....3c1ea38b5" "refresh_token": "def50200dfce4da3....fdc689e5" } client_idclient_secret 存储在一个表中。

我的问题是: 将client_idclient_secret 存储在前角应用程序的本地存储中是否安全/推荐?因为它基本上代表了用户凭据,如果有人窃取它们,他们将可以访问 api。但是没有它们,客户端无法向 api 发送请求。 我爬网但找不到真正的答案,即使在 oauth 2 文档中也是如此

谢谢

【问题讨论】:

    标签: security oauth oauth-2.0


    【解决方案1】:

    这里有几点:

    • 您的 Angular 应用应使用授权码流 + 打开 id 连接
    • 考虑使用更标准的授权服务器和更标准的访问令牌生命周期
    • 会话存储在 Safari / Firefox 和 SPA 重启方面的问题较少
    • 令牌是否使用会话存储取决于数据敏感性+风险分析
    • 考虑到访问令牌有效的会话时间有时会映射到用户同意

    我有一篇文章,它基于可用性和安全性之间的权衡:https://authguidance.com/2019/09/08/ui-token-management/

    【讨论】:

    • 感谢您的回复。确实,授权码是推荐给我的,我刚刚想通了(不推荐implicit授权类型)。对于令牌寿命,我选择了 60 秒进行测试。关于 Open id,我的主要“问题”是我希望用户能够使用他自己的凭据连接到服务器,而不是使用 facebook、instagram 等。我会允许这样做,但是当我有选择的时候,我更喜欢创建一个帐户,而不是使用我的社交网络凭据。或者也许我们可以建立一个个人 OpenId 提供者?我要阅读你的网站,谢谢
    • @gary - 感谢您的回答,但请您回答问题:My question is : Is it safe/recommended to store the client_id and the client_secret in the local storage of the front angular app ?
    猜你喜欢
    • 2021-07-15
    • 2018-12-23
    • 1970-01-01
    • 2017-05-09
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    • 1970-01-01
    • 2018-06-05
    相关资源
    最近更新 更多