在没有其他服务器的SSO的情况下进行身份验证

时间:2020-05-15 14:34:19

标签: php angular asp.net-core

我有一个场景,我们有一个基于PHP的网站,用户可以通过该网站使用存储在数据库中的凭据登录。现在我们有了另一个以.NET CORE作为API层的SPA网站。我们没有选择像Azure这样的中央身份验证服务器的选择。如果我想让SPA的用户访问该网站,因为他们已经通过PHP进行了身份验证,该怎么办? PHP可以生成JWT并将其传递给API吗?然后,JWT如何进入SPA并进行验证?请好心,因为我是网站编程的新手。

2 个答案:

答案 0 :(得分:1)

Json Web Tokens是无记名令牌的一种非常特定的格式。像OpenID Connect这样的协议可以提供有关登录和信任过程的更多结构,但从本质上讲,JWT只是具有验证哈希的BASE64编码的json。

您可以使用JWT推出自己的SSO,但是与安全性中的所有其他方面一样,滚动自己的SSO会带来犯人头错误和损害安全性的巨大风险。因此,如果您采用这种方法,请进行研究和研究。

我做过非常类似的事情,但纯粹停留在.net世界中。我使用.net库构建JWT(https://docs.microsoft.com/en-us/previous-versions/visualstudio/dn464181(v%3Dvs.114)),并使用ASP.NET Core Identity处理JWT(https://www.nuget.org/packages/Microsoft.AspNetCore.Authentication.JwtBearer)的验证,因此我没有编写代码来实际生成JWT。服务器之间也仅建立SSL连接,因此可以减轻令牌被嗅探的某些风险。

有一些PHP可以生成JWT的库,或者您可以使用任何语言站起来自己的JWT令牌提供程序。

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

它并不可怕,但是安全性是您必须确保绝对正确无事的地方。

答案 1 :(得分:0)

从另一台服务器进行身份验证。您可以通过多种方式来执行此操作,但是SSO协议(如OpenID Connect和SAML)是专门为您要尝试的操作而设计的。

但是,这些协议绝非简单。您应该尝试看看是否可以找到现有的库,以使您的PHP应用程序使用同一协议充当身份提供商(IdP),而SPA充当服务提供商(SP)。

这是一个延伸的想法-您没有解释为什么不能使用中央身份验证服务器。您可能会考虑使用Keycloak之类的东西(还有其他选择-这是我使用的选择),您可以自行托管这些东西,并可以使用OpenID-Connect或SAML 2.0作为IdP或SP。

您绝对不应自己从头开始构建它(除非这是一个业余项目)。身份验证充满了安全隐患,即使是最有经验的程序员也可能被绊倒。

相关问题