繁体   English   中英

OpenID Connect,oAuth2-从哪里开始?

[英]OpenID Connect, oAuth2 - Where to start?

我不确定在实施过程中应该采用哪种方法,是否需要一些指导。

我有一个Yii2框架(PHP)内置的REST API(api.mysite.com),可从mysite.com(数据库)访问数据。 在mysite.com上,我们的用户将能够创建将提供客户ID +机密的关联应用-授予对其帐户的访问权限(全部权限?)。

根据我的研究,下一步似乎是设置一些东西来实际提供要传递给api的承载令牌-我一直倾向于使用oAuth2,但随后我看到oAuth2不提供身份验证。 基于此,我想需要OpenID Connect才能提供用户令牌,因为我的API需要根据用户上下文限制数据。

通过这种方式,据我了解,我需要拥有一个身份验证服务器-几个问题:

  • 我可以安装用作OpenID Connect / oAuth2身份验证服务器的软件吗?

  • 是否有将用作OpenID Connect / oAuth2身份验证服务器的特定Amazon Web Services?

  • 我假设流程将是:App向具有客户端ID +机密的身份验证服务器发出请求,并接收访问令牌。 访问令牌可用于进行API调用。 这些令牌存储在哪里(我假设一个特定于我正在使用的服务/软件的数据库?)

  • 进行API调用时,我会传递承载令牌和用户令牌吗?

非常感谢任何见解。

您的理解与现实相差不远。 假设您有两台服务器用于身份验证,这台服务器负责根据Authorization Basic和base64编码的CLientID / ClientSecret组合生成令牌。 这基本上是应用程序认证。 如果您还想添加用户数据,只需在帖子正文中传递用户名/密码,在服务器端进行身份验证,然后向令牌中添加更多数据,例如用户名,声明,角色等。

您可以控制这些令牌中的内容,如果使用JWT之类的东西(Json Web令牌),则它们只是数据的json位。

那么您就拥有了一个资源服务器,并用授权载体和从授权服务器获得的令牌对其进行了攻击。

最初,令牌不会存储在任何地方,而是在您控制的一段时间内发行。 但是,如果您确实愿意,可以执行其他操作,并将它们存储在数据库中。 即使到期,即使有人把手放在他们的身上,到期也要安全得多! 就我而言,我花了30分钟来确保令牌有效。

现在,您尚未指定要使用的语言/框架。 如果您使用点网之类的东西,请查看IdentityServer,版本4适用于点网核心,版本3适用于以下内容。

如果您对此感兴趣,我也有一篇很长的文章:

https://eidand.com/2015/03/28/authorization-system-with-owin-web-api-json-web-tokens/

希望所有这些可以澄清您的一些问题。

-添加以回答评论中的问题。

令牌包含它们需要由资源服务器正确验证的所有信息,因此您无需将其存储在数据库中。 正如我已经说过的,您可以存储它们,但是在我看来,这会使它们的安全性降低。 不要忘记控制令牌中的内容,因此可以在需要时添加用户名。

想象一下这种情况,您想在对授权服务器的同一调用中对应用程序和用户进行身份验证。 以标准方式执行OAuth2,这意味着首先根据客户端ID /客户端密码对应用程序进行身份验证。 如果通过了,则接下来进行用户身份验证。 将用户名或用户ID添加到您生成的令牌以及所需的其他信息中。 这意味着资源服务器可以安全地假定令牌中传递给它的用户名已由身份验证服务器验证,否则首先不会生成令牌。

我宁愿将这两部分分开保存,这意味着让AS(授权服务器)处理应用程序级别的安全性。 然后在RS(资源服务器)端,您有一个诸如ValidateUser之类的端点,它负责用户验证,之后您可以执行所需的任何操作。 选择我认为适合您的项目的任何一种。

最后一点,始终确保您的所有api调用(实际上AS和RS都只是api)都是通过HTTPS进行的,并且永远不会通过GET调用传输任何重要信息,这意味着可以拦截URL。 标头和POST正文均已加密,并通过HTTPS进行安全保护。

我相信,这应该解决您的两个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM