我目前正在使用ASP.NET MVC和Web Api对用户进行身份验证。我希望我的用户通过ASP.NET MVC登录页面登录,但需要通过身份验证才能访问Angular 6应用程序。
我想采用这种方法,因为我希望将来链接到其他需要身份验证的应用程序,但允许用户在登录页面登录后访问这些应用程序。
我可以使用哪种单一登录方法来验证用户身份?
答案 0 :(得分:1)
我能够在我的mvc应用程序上生成访问令牌,并且 进行身份验证,但如何在角度验证用户 使用相同访问令牌的应用程序?
最好的方法是不创建自定义令牌。相反,您想使用行业标准-OAuth 2.0和OpenID Connect。
您可以自己设置IdentityServer或使用身份提供程序,例如Azure Active Directory Auth0。
答案 1 :(得分:0)
您可以尝试在使用ASP.NET MVC登录名进行身份验证后生成令牌(JWT)。
public ActionResult Test()
{
string currentUser = User.Identity.GetUserName();
if (currentUser.Length != 0)
{
// build JWT Token
DataAccess dataAccess = new DataAccess();
ViewBag.Token = dataAccess.BuildTokenObject(currentUser).BearerToken;
}
return View();
}
构建令牌功能。您可以为令牌设置到期时间,也可以在JWT上搜索有关在令牌中设置时间到期的详细代码。
public TokenInfo BuildTokenObject(string user)
{
TokenInfo token = new TokenInfo();
UserRole roleInfo = new UserRole();
List<ClaimInfo> claims = new List<ClaimInfo>();
roleInfo = GetRole(user);
token.UserName = user;
token.BearerToken = new Guid().ToString();
token.RoleName = roleInfo.Role_Name;
token.IsSysAdmin = roleInfo.isSysAdmin;
token.Claims = GetClaims(roleInfo.Role_Name);
// Set JWT bearer token
token.IsAuthenticated = token.RoleName == "" ? false : true;
token.BearerToken = BuildJwtToken(token);
return token;
}
Angular应用程序使用Route Guard读取令牌。 如果验证有问题,请重定向到错误页面。
export class AuthGuardService implements CanActivate {
constructor(private _authService: AuthService,
private _router: Router) {}
canActivate(): Observable<boolean> | Promise<boolean> | boolean {
// check if token has expired
if (this._authService.isAuthenticated()) {
return true;
} else {
this._router.navigate(['/error']);
return false;
}
}
}
读取令牌到期的功能。
isAuthenticated(): boolean {
let jwt = localStorage.getItem('cs-token');
if (HELPER.isTokenExpired(jwt)) {
return false;
} else {
return true;
}
}
其他参考: https://jwt.io/