.net 角度布线或。Net核心重定向,身份验证应首选哪个?

.net 角度布线或。Net核心重定向,身份验证应首选哪个?,.net,angular,authentication,asp.net-core,asp.net-core-webapi,.net,Angular,Authentication,Asp.net Core,Asp.net Core Webapi,我是一个初学者的全堆栈开发人员。我想做一个简单的登录认证系统。我在后端使用.netcore3.0,在前端使用angular8,在数据库中使用MsSQL服务器 我实现了一个Web API,它提供了注册功能(我的问题是登录身份验证)。我还使用Angular为登录和注册用户界面实现了一个页面 如果用户在登录时键入真实密码,我应该重定向/路由到“Dashboard”页面 如果用户在登录时键入了真实密码,我不应该重定向/路由到任何地方 我想我找到了两种解决这个问题的方法 第一个是,POST用户在API中键

我是一个初学者的全堆栈开发人员。我想做一个简单的登录认证系统。我在后端使用
.netcore3.0
,在前端使用
angular8
,在数据库中使用
MsSQL服务器

我实现了一个Web API,它提供了
注册
功能(我的问题是
登录
身份验证)。我还使用
Angular
登录和
注册
用户界面实现了一个页面

如果用户在
登录时键入真实密码,我应该重定向/路由到“Dashboard”页面

如果用户在
登录时键入了真实密码,我不应该重定向/路由到任何地方

我想我找到了两种解决这个问题的方法

第一个是,
POST
用户在API中键入的电子邮件和密码,检查数据库中键入的电子邮件的密码是否为真,如果为真,则重定向到仪表板页面。很快进行后端签入(
.Net Core 3.0
)。 例如:

public IActionResult checkPasswordIsTrue(){

if (tpyedPassword == realPassword)
{
     return Redirect("http://192.168.1.22:4200/dashboard");
}
第二个是,
POST
电子邮件和密码,由用户输入到API,
GET
从键入的电子邮件的真实密码中获取。然后检查输入的密码是否为真,如果为真(使用
canActivate
conditional routing),则发送到仪表板页面。很快在前端(
Angular
)进行检查。 例如:

public IActionResult checkPasswordIsTrue(){

if (tpyedPassword == realPassword)
{
     return Redirect("http://192.168.1.22:4200/dashboard");
}
HTML

 <button mat-raised-button (click)="signIn()" color="primary" routerLink="/dashboard" routerLinkActive="active" >Sign in</button>
哪种方法是正确的?如果两者都是真的,哪一个更有效?
解决此类问题的最佳实践方法是什么?

因此,在第二种方法中,您将实际密码返回给客户端并检查客户端?如果是这样,那肯定是错误的。您的密码应该被散列,这样您的第二个选项就不可能实现。此外,客户端实际上应该重定向,但只基于服务器端登录result@AluanHaddad我明白了,那么你对第一种方法有什么看法?它更好,但请看我评论的最后一部分。基本上,如果身份验证失败,服务器应该返回一个带有
401
状态代码的响应,客户端应该通过不允许用户继续来处理。请记住,像这样的客户端检查是帮助指导用户的软检查。它们不包括安全性。每次获取不应公开的数据时,都需要确保身份验证/授权。@AluanHaddad好的,非常感谢。我知道我需要检查后端的身份验证,就像第一种方法一样,我应该向客户端返回一个响应,比如401或Success(取决于身份验证结果)。我能正确理解吗?是的,没错。因为您的登录UI是用angular编写的,所以不需要从服务器返回重定向,让客户端来处理。但请记住不要在数据库中存储未加密的密码。