当前位置: 首页 > 知识库问答 >
问题:

OpenID连接,oAuth2-从哪里开始?

彭正谊
2023-03-14

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

我在Yii2框架(PHP)中构建了一个RESTAPI(API.mysite.com),用于访问mysite中的数据。com(数据库)。在mysite上。com我们的用户将能够创建连接的应用程序,该应用程序将提供客户端id机密-授予对其帐户的访问权限(全范围?)。

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

在这种方法中,我的理解是,我需要一个身份验证服务器—所以有几个问题:

>

  • 是否可以安装软件作为OpenID Connect/oAuth2身份验证服务器?

    是否有特定的Amazon Web服务将充当OpenID Connect/oAuth2身份验证服务器?

    我假设流程是:应用程序使用客户端id secret向身份验证服务器发出请求,并接收访问令牌。访问令牌可用于进行API调用。这些令牌存储在哪里(我假设数据库特定于我使用的服务/软件?)

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

    非常感谢您的任何见解。

  • 共有1个答案

    诸葛卜霸
    2023-03-14

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

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

    然后你有一个资源服务器,你用授权承载和你从授权承载中获得的令牌击中它。

    最初,令牌不会存储在任何地方,而是在您控制的一段时间内发行。但是,如果您真的愿意,您可以执行其他操作并将它们存储在db中。不过,过期要安全得多,即使有人得到了他们的手,他们也不会有太长时间!在我的情况下,我用了30分钟来验证令牌的有效性。

    现在,您还没有指定要研究的语言/框架。如果您使用类似于点网的东西,那么请查看IdentityServer,版本4代表点网核心,版本3代表以下任何内容。

    如果您感兴趣,我还有一篇关于这个主题的很长的文章:

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

    希望所有这些都能澄清你的一些问题。

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

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

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

    我更倾向于将这两个方面分开,这意味着让AS(授权服务器)来处理应用程序级的安全性。然后在RS(资源服务器)端有一个endpoint,例如ValidateUser,它负责用户验证,之后可以执行任何需要的操作。我会说,选择哪个更适合你的项目。

    最后一点,始终确保所有api调用(AS和RS都是真正的api)都是通过HTTPS进行的,并且永远不要通过GET调用传输任何重要信息,这意味着URL可以被截获。邮件头和邮件正文都是通过HTTPS加密和安全的。

    我相信这应该能解决你的两个问题。

     类似资料:
    • 我一直在广泛阅读有关OAuth和OpenID Connect的内容,但此问题专门涉及OAuth2资源所有者密码授予(又名OAuth2资源所有者凭据授予,又名OAuth2密码授予) 某些资源(例如Justin Richer的《OAuth2 in Action》一书)说不要使用OAuth2资源所有者密码授予进行身份验证-请参阅书中的第6.1.3节。 以下其他好资源都说我们可以使用OAuth2资源所有者

    • 我有一个由(简化)3部分组成的应用程序: Security-Token-Service(处理OAuth2和OpendId-Connect)具有自己的独立数据库(实际上它是具有ASP. NET Core身份的身份服务器4) API(具有单独的数据库) 和与API通信的SPA 现在的问题是,STS的数据库保存用户数据,在API-DB中还有一个表user accounts,其中包含每个用户的工作负载数据

    • 桌面应用程序的正确oAuth2流是什么?除了桌面应用程序之外,我还有一个使用隐式流的SPA Web GUI。如果客户端在3600之后重定向到IdP以发出新的Access令牌,这并不重要。 但是桌面应用程序需要全天候运行,或者可能全天候运行。因此它需要通过refresh_token自动刷新访问令牌。但是由于隐式流不提供刷新令牌,因此它可能是桌面应用程序的错误流,不是吗? 我想我需要身份验证代码流,它

    • 我试图使用这个库(express-openid-connect)为身份验证后端提供“简单的设置”,但在从调用对象时,我遇到了一个简单的错误: 当然,我得到了这个错误: 没有重载匹配此调用。 重载4中的1“(Path:PathParams,...Handlers:RequestHandler []):Express”,出现以下错误。 类型“(req:OIDRequest,res:express.re

    • 问题内容: 我正在尝试开始学习如何创建套接字服务器。我想添加一些有用的功能(例如auth,也许还有其他一些功能)。也许有人可以给我指出一个很好的教程,这将帮助我入门(+也许还有其他一些想法) 问题答案: 看这里:60秒内扭曲的网。这是一组博客文章,逐步描述了如何使用Twisted做很多常见的事情,所有这些都是由Twisted的最大贡献者Jean- Paul Calderone撰写的。这确实是您应该