Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在没有SSO的情况下从另一台服务器进行身份验证_Php_Angular_Asp.net Core - Fatal编程技术网

Php 在没有SSO的情况下从另一台服务器进行身份验证

Php 在没有SSO的情况下从另一台服务器进行身份验证,php,angular,asp.net-core,Php,Angular,Asp.net Core,我有一个场景,我们有一个基于PHP的网站,用户通过该网站使用存储在数据库中的凭据登录。现在我们有了另一个SPA网站,它的API层是.NETCore。我们没有像Azure这样的中央身份验证服务器。如果我想让SPA的用户访问该网站,因为他们已经用PHP进行了身份验证,我应该怎么做?PHP能否生成JWT以将其传递给API?JWT如何到达SPA,我如何验证它?请善待我,因为我是一个网站编程新手。从另一台服务器进行身份验证就是SSO。有很多方法可以做到这一点,但是像OpenID Connect和SAML这

我有一个场景,我们有一个基于PHP的网站,用户通过该网站使用存储在数据库中的凭据登录。现在我们有了另一个SPA网站,它的API层是.NETCore。我们没有像Azure这样的中央身份验证服务器。如果我想让SPA的用户访问该网站,因为他们已经用PHP进行了身份验证,我应该怎么做?PHP能否生成JWT以将其传递给API?JWT如何到达SPA,我如何验证它?请善待我,因为我是一个网站编程新手。

从另一台服务器进行身份验证就是SSO。有很多方法可以做到这一点,但是像OpenID Connect和SAML这样的SSO协议是专门为您所要做的事情而设计的

然而,这些协议并不简单。您应该尝试查看是否可以找到现有库,让您的PHP应用程序充当身份提供者(IdP),让您的SPA充当使用相同协议的服务提供者(SP)

这是一个延伸的想法-您没有解释为什么不能使用中央身份验证服务器。您可能会考虑像Keycloak这样的东西(还有其他选项——这是我使用过的选项),您可以自己主持它,并且可以使用OpenID连接或SAML 2作为IDP或SP。
你绝对不应该自己从头开始构建(除非这是一个爱好项目)。身份验证充满了安全隐患,即使是最有经验的程序员也会遇到这些隐患。

Json Web令牌是一种非常特殊的承载令牌格式。有像OpenID Connect这样的协议,它们在登录和信任过程中提供了更多的结构,但在其核心,JWT只是带有验证哈希的BASE64编码json

您可以使用JWT滚动您自己的SSO,但与安全性中的所有内容一样,滚动您自己的SSO会带来重大风险,可能会犯严重错误并危及您的安全性。所以,如果你走这条路,就要不断地研究

我做了一件非常类似的事情,但纯粹停留在.net世界。我使用.net库构建JWT()和ASP.net核心标识来处理JWT()的验证,因此我没有编写代码来实际生成JWT。服务器之间也只有SSL连接,因此令牌被嗅探的风险有所降低

PHP有一些库可以生成JWT,您也可以用任何语言建立自己的JWT令牌提供程序

也有可能找到一个OpenId连接提供程序,它可以连接到您现有的数据库中。是一个用于.net的,但在PHP世界中可能会有一个。这会带来一些开销,但确实解决了无法使用第三方OpenId连接提供程序的问题


这并不太可怕,但安全是一个你必须绝对确保一切正常的地方。

谢谢你的宝贵建议。更具体地说。。如果PHP网站成功生成带有密钥的JWT令牌,并希望SPA网站(后端.net核心API)使用该令牌进行身份验证。这里的流程应该是什么。PHP是否应该将令牌发送到API层以获得验证,API SPA客户端如何知道令牌已被验证,以及hance如何允许用户访问网站。感谢you@JaganTN这就是研究的意义所在。基本流程是客户端从PHP网站获取JWT,并存储该标记(本地存储、cookie、javascript内存等)。JWT由PHP站点签名(通过对称密钥或非对称密钥),SPA知道如何验证签名。当客户端向SPA发送令牌时,SPA使用验证逻辑来确定令牌的有效性。不过,请仔细阅读,您将是支持该应用程序的人,并强调RubberChickenLeader在其回答中所说的部分内容-这里有很多安全考虑因素。一个简单的JWT令牌交换将起作用,但是考虑如果黑客拦截了该令牌会发生什么情况。他们现在可以访问您的“SPA”站点,就好像他们是从中窃取代币的用户一样。由于这个令牌是在互联网上传输的,这不是一个不太可能的情况,SAML/OAuth/OpenID的协议中有一些方面可以防止这种劫持。@这是正确的,我不介意使用我的diy jwt的主要原因之一是100%的ssl连接,并且知道一旦出现漏洞,会有什么危害。我们不会通过未加密的电子邮件向客户发送任何PII和最低限度的信息。您好,请不要从头重写代码。。对于生成jwt令牌,现有库将有所帮助,但我不明白身份验证应该如何进行。。在缺少SSO的情况下,从php网站到spa网站。(我不知道客户机为什么不想使用SSO)客户机可能并不真正理解什么是SSO。如果他们想避免使用第三方服务或软件,这是可以理解的。但是,如果他们希望两个站点共享身份验证凭据,这就是SSO的定义。您可能会找到一些PHP库,它们可以帮助您的PHP应用程序本身作为IdP运行,而不是使用单独的软件来运行。在安全身份验证流程中,生成JWT令牌是一个相对简单的步骤。查看(Digital Ocean)绘制的OAuth“授权代码授权类型”[查看涉及的高级步骤(为多个步骤生成JWT令牌)。谢谢你们。PS:THLR,您提供的链接不起作用)…我会让客户端知道正确的SSO需要一个中央服务器。在这种情况下,请验证我的理解:当用户来自PHP并单击SPA客户端的链接时,SPA会检查标头(承载器)中的令牌。这个令牌本身应该如何通过类似SSO的Azure进行验证?请告诉我