【问题标题】:API Authentication and use of OAuth2API认证和OAuth2的使用
【发布时间】:2014-12-17 18:42:03
【问题描述】:

我正在尝试了解如何将基于令牌(基于密钥?)的身份验证引入移动客户端将使用的 Web API(目前正在查看 Sinatra,但也可能是 Rails)和OAuth 将如何融入其中。

假设我想创建一个使用 Facebook 进行身份验证和获取基本用户数据的 Web 服务。在这里,我的 API 将是 Facebook 的 OAuth 服务器的客户端,在用户成功登录 Facebook 时请求访问令牌。然后,这将授予我访问用户数据的权限,我将使用这些数据在我的数据库中创建一个条目,将此用户特定令牌与我希望链接到它们的任何其他应用程序信息一起存储。

到目前为止,我认为我的那部分是正确的,但在这里我有点困惑。

我认为我的 API 还需要某种形式的 API 密钥来授予移动用户访问权限,因为我不想在他们的设备上传输和存储 Facebook 密钥。我是否必须有一个单独的密钥存储区,提供给客户才能访问我的服务?是否有任何“最佳实践”方法可以做到这一点?

【问题讨论】:

    标签: ruby api authentication oauth sinatra


    【解决方案1】:

    我是否必须有一个单独的密钥存储区,提供给客户才能访问我的服务?

    是的。

    是否有任何“最佳实践”方法可以做到这一点?

    最简单的方法是在每次创建用户时生成一个单独的身份验证令牌,并将其公开给移动客户端。然后将其与每个后续请求标头一起发送。

    Devise 提供了simple example 如何实现这一目标。您不需要为此设计,只需提供一些令牌生成机制即可。

    #Devise.friendly_token
    def self.friendly_token
      SecureRandom.urlsafe_base64(15).tr('lIO0', 'sxyz')
    end
    

    可以通过以下方式扩展此机制以提供更高的安全性

    1. 本身就是一个 oauth2 提供者。 使用 facebook 成功登录后,您将生成一个 :authorization_code,客户端可以在下一步中将其交换为您自己的 Oauth2 Bearer 或 MAC 令牌。然后,您可以在每个用户身份验证请求中发送您自己的 Oauth2 令牌。 见rack-oauth2

    2. 实施 HMAC 令牌加密。 唱歌后生成并向每个客户端公开一个 secret_key。使用此密钥和唯一的客户端 ID 对消息进行签名。然后,服务器可以查找特定 client_id 的 secret_key 并验证消息。
      api-auth

    【讨论】:

      猜你喜欢
      • 2015-05-22
      • 2016-05-10
      • 2013-05-28
      • 2018-09-04
      • 2022-08-24
      • 2016-09-11
      • 1970-01-01
      • 2015-06-06
      • 2013-03-06
      相关资源
      最近更新 更多