将OAuth用于移动和网站消耗我自己的API的正确方法是什么?



我有一个与Oauth 2的工作方式有关的问题,但是由于使用IdentityServer来实现OAuth,所以我认为这很重要。我在任何地方都找不到答案。

我正在构建一个消耗我自己的API的网站和一个移动应用程序。我的应用程序的每个用户都会有一个用户名和密码,这将使他访问应用程序/网站,而API对他的信息。

我不确定处理用户登录流的正确方法:

  1. 在网站上,我有自己的设计登录表格。我不想将用户移至我的auth服务器登录,然后让他批准他提供的信息 - 他是我的系统上的用户 - 我可以访问所有信息 - 像Facebook一样的Kida登录并访问信息 - 他们不问您愿意给他们什么。那么,隐含的方式真的是吗?
  2. 在移动应用程序上,我也有登录表单,现在我在这里阅读(https://datatracker.ietf.org/doc/html/draft-ietf-oauth-native-apps-10(要在WebView中登录??看起来不像Facebook登录在其移动应用程序上的网络浏览中。
  3. 我首先要考虑的方法是资源所有者。用户将登录,获取令牌和刷新令牌,并可以开始对抗我的API。但是将我的客户端_id和秘密存储在移动应用程序上吗?在网站上JavaScript文件?感觉不对。我当然可以打电话给API,该API会掩盖这些API并成为登录过程的代理...但是...(阅读#4(。
  4. 将来我想允许第三方开发人员访问。为了使他们允许我的系统用户登录,我将使用隐式流程。另外,我计划这些开发人员帐户具有限制API访问权限(例如,对API的电话数量将受到计划的限制(。是什么防止这些开发人员在我的系统上在我的系统上询问其帐户的用户名和密码,并使用访问令牌和刷新令牌从我的服务器中获得响应,并使用我的API,但是他们想要的,而无需限制,并可以访问整个用户个人资料?
  5. 可以说我坚持资源所有者的流程,从服务器a代币和刷新令牌接收。我应该在移动设备上存储什么?如何?应该在浏览器中存储什么?如何存储?刷新象征?每当他打开该应用程序时

编辑

只是为了澄清,因为我发现了很多讲座和文章,可以从API消费者的角度解释该过程(即第三方开发人员(:我是API所有者和Auth Server所有者,我m用户帐户的所有者(他们是我的服务的用户(,我也是我自己的消费者(尽管网站和移动应用程序(,并且将来我希望允许第三方开发人员允许我的用户登录他们的服务帐户(有点像Facebook或Google(

您不应该将client_secret存储在应用程序中,但我怀疑您是否会围绕存储client_id。您也可以禁用应用程序的同意屏幕,并构建本机登录视图。如果您不希望用户每次使用您的应用程序,则需要将access_tokenrefresh_token存储在设备上(可能在数据库中加密(。

至于问题4,您可以执行以下操作:

  1. client_secret嵌入您的(Web(应用程序
  2. 设置哪些主机可以访问您的api在身份服务器上
  3. 身份服务器生成盐并将其发送给客户
  4. 客户使用hash(ip_address + session_salt)
  5. 计算session_secret
  6. 客户端将session_secretclient_secret用于API调用
  7. 服务器验证hashclient_secret

几乎不可能完全防止某人使用您的API。但是您应该添加各种限制速率的方法,例如限制IP地址,API调用等。但是没有什么可以阻止某人分解您的应用程序并访问您的client_id

最新更新