作为 API 创建者,我是否应该在创建客户端 API 密钥后隐藏它们?
As an API creator, should I hide client API keys once they've been created?
我正在开发 API,我的 API 的用户可以注册我的 API 以获得 API 密钥。当我生成这个 API 密钥时,我正在使用非对称加密来创建一个存储在我的数据库中的散列。
我的问题是,一旦用户生成 API 密钥然后注销,下次他们登录时,我就没有 API 密钥可以显示了在我的应用程序的仪表板中。这是正常的/可以接受的吗?
其他 API 的做法是否不同?即他们是否向用户提供 API 密钥?如果是这样,他们是否将未散列的 API 密钥存储在数据库中?这是用户体验和安全之间的平衡吗?
在 OAuth2 中,系统始终显示 OAuth2 客户端 ID 是很常见的,但 OAuth2 密码只显示一次。
如果您想让用户体验良好,请着重于让新的 API 密钥更容易滚动,而不会使旧密钥过期。您可以显示 API 个密钥(不是秘密)的列表,以及它们最后一次使用的时间,这样也很容易让用户禁用可能不再使用的密钥。
API 密钥通常不被认为是安全的。通常 API 密钥对客户端可见。 API 密钥不应用于执行安全授权。但是,您可以根据需要设计任何系统,在您当前的设计中,如果第三方或攻击者可以通过获取所谓的“API 密钥”成功调用您的 API,则最好隐藏它并让用户负责将密钥安全地存储在其他地方。此外,您应该确保在您的 API 中,必须有一种方法可以
- 撤销现有的 API 密钥。
- 生成一个带有有效期的新 API 密钥。
我正在开发 API,我的 API 的用户可以注册我的 API 以获得 API 密钥。当我生成这个 API 密钥时,我正在使用非对称加密来创建一个存储在我的数据库中的散列。
我的问题是,一旦用户生成 API 密钥然后注销,下次他们登录时,我就没有 API 密钥可以显示了在我的应用程序的仪表板中。这是正常的/可以接受的吗?
其他 API 的做法是否不同?即他们是否向用户提供 API 密钥?如果是这样,他们是否将未散列的 API 密钥存储在数据库中?这是用户体验和安全之间的平衡吗?
在 OAuth2 中,系统始终显示 OAuth2 客户端 ID 是很常见的,但 OAuth2 密码只显示一次。
如果您想让用户体验良好,请着重于让新的 API 密钥更容易滚动,而不会使旧密钥过期。您可以显示 API 个密钥(不是秘密)的列表,以及它们最后一次使用的时间,这样也很容易让用户禁用可能不再使用的密钥。
API 密钥通常不被认为是安全的。通常 API 密钥对客户端可见。 API 密钥不应用于执行安全授权。但是,您可以根据需要设计任何系统,在您当前的设计中,如果第三方或攻击者可以通过获取所谓的“API 密钥”成功调用您的 API,则最好隐藏它并让用户负责将密钥安全地存储在其他地方。此外,您应该确保在您的 API 中,必须有一种方法可以
- 撤销现有的 API 密钥。
- 生成一个带有有效期的新 API 密钥。