Angular4 azure active directory身份验证使用ng2 adal库从url中删除id_令牌。
我引用了下面的博客来实现。https://dotronald.be/add-azure-active-directory-to-an-existing-angular-2-single-page-application/
>
已安装ng4 adal
为ng4-adal创建了一个类型脚本配置文件,以设置Azure连接详细信息,如下所示,从'@角/核'导入{注入式};
@Injectable()
export class AdalConfig {
public get getAdalConfig(): any {
return {
tenant: 'YOUR TENANT NAME',
clientId: 'YOUR CLIENT ID',
redirectUri: window.location.origin + '/',
postLogoutRedirectUri: window.location.origin +
'/logout'
};
}
}
创建了一个canActivate防护,用于在导航前验证角度路线,如下所示,
import { Injectable } from '@angular/core';
import { Router, CanActivate,
ActivatedRouteSnapshot,RouterStateSnapshot, NavigationExtras }
from '@angular/router';
import {AdalService} from "ng4-adal/core";
@Injectable()
export class AuthenticationGuard implements CanActivate {
constructor(private _adalService: AdalService, private router:
Router) { }
canActivate(route: ActivatedRouteSnapshot, state:
RouterStateSnapshot): boolean{
if (this._adalService.userInfo.isAuthenticated) {
return true;
}
else {
this._adalService.login();
return false;
} } }
在应用程序的构造函数中添加了以下代码。组成部分ts将启动ng4 adal服务,如下所示:,
constructor(
private _adalService: AdalService,
private _adalConfigService: AdalConfig
)
{this._adalService.init(this._adalConfigService.getAdalConfig);}
为了防止用户每次必须再次登录,身份验证令牌存储在浏览器缓存中。这允许我们尝试检索此令牌并继续使用应用程序,而无需再次重定向到Azure登录页面。
在应用程序的ngOninit中添加了以下代码。组成部分ts将克服上述问题,具体如下:,
ngOnInit() {
this._adalService.handleWindowCallback();
this._adalService.getUser();
}
在步骤3中为app-routing.ts文件中的必需路由创建的防护设置如下,
const routes: Routes = [
{ path: '', redirectTo: '/home', pathMatch: 'full', canActivate:
[AuthenticationGuard]},
{ path: 'admin-measure', redirectTo: '/#admin-measure'},
{ path: 'home', component: HomeComponent, canActivate:
[AuthenticationGuard] },
{ path: 'logout', component: LogoutComponent },
{ path: 'unauthorized', component: UnauthorizedComponent }
];
在应用程序中注册服务。单元
我在控制台中遇到的错误如下,错误:Uncaught(在promise中):错误:无法匹配任何路由。URL段:“id\u令牌”
研究发现的问题:在角2中使用哈希时,重定向存在问题。问题是,当身份验证后的重定向中返回AuthResult时,Angular认为这是一个称为access_token的路由。
有什么解决办法吗?
我找到了解决办法。
来自服务提供商的回调正在使用Angular2路由器无法理解的#/id_令牌。将在控制台中获取错误-“错误:无法匹配任何路由。Url段:'id_token'”。为了解决这个问题,我们将添加一个回调路由来消化JWT令牌,然后重定向到我们的目标页面。
A.创建oauth-callback.component如下,
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import {AdalService} from "ng4-adal/core";
@Component({
template: '<div>Please wait...</div>'
})
export class OAuthCallbackComponent implements OnInit {
constructor(private router: Router, private _adalService:
AdalService) {}
ngOnInit() {
if (!this._adalService.userInfo) {
this._adalService.login();
} else {
this.router.navigate(['home']);
}
}
}
B.为"id_token"路线创建oauth-callback-handler.guard如下,
import { Injectable } from '@angular/core';
import { Router, CanActivate, ActivatedRouteSnapshot,
RouterStateSnapshot } from '@angular/router';
import { AdalService } from 'ng4-adal/core';
@Injectable()
export class OAuthCallbackHandlerGuard implements CanActivate {
constructor(private router: Router, private _adalService:
AdalService) { }
canActivate(route: ActivatedRouteSnapshot, state:
RouterStateSnapshot): boolean {
this._adalService.handleWindowCallback();
if (this._adalService.userInfo.isAuthenticated) {
var returnUrl = route.queryParams['returnUrl'];
if (!returnUrl) {
this.router.navigate(['home']);
} else {
this.router.navigate([returnUrl], { queryParams:
route.queryParams });
}
}
else {
this._adalService.login();
}
return false;
}
}
C.注册oauth-callback.componentoauth-callback-handler.guardapp.module.
d、 为oauth回调处理的“id_令牌”注册路由。组件和oauth回调处理程序。守卫如下:,
const routes: Routes = [
{ path: 'id_token', component: OAuthCallbackComponent, canActivate:
[OAuthCallbackHandlerGuard] }[AuthenticationGuard]},
{ path: 'logout', component: LogoutComponent }];
如需进一步参考,请参阅以下链接,
https://blogs.msdn.microsoft.com/premier_developer/2017/04/26/using-adal-with-angular2/
我正在尝试使用Shiro对我正在构建的JSF Web应用程序进行身份验证和授权。不幸的是,我仍然有一些困难缠绕我的头如何把所有的东西放在一起。 我已经成功地(100%使用shiro.ini文件)将身份验证配置回存储测试凭据集的JDBC领域。当凭据以明文形式存储时,它对我来说非常有效。 我的最终目标是统一MySQL数据库中的现有凭证集。密码存储为SHA-256盐哈希。我花了一整天的时间阅读可用的文档
我有一个客户端anger-js应用程序。我有一个服务器端nodejs应用程序接口。客户端和服务器端应用程序位于不同的域上。客户端使用API获取或发布一些数据。客户端还需要从服务器端获取图像并在浏览器中显示它们。 我使用护照nodejs模块进行身份验证。我不知道哪种身份验证策略更适合我。我认为有两种类型的身份验证策略:基于令牌的和基于cookie的。我认为这两种类型在我的情况下都没用: > < li
在身份验证等情况下,与会话相比,使用JWTs有什么优势? 它是作为独立方法使用还是在会话中使用?
我使用的是在远程服务器上的脚本上运行curl的本地php脚本。远程脚本受http身份验证保护。 当我运行本地脚本时,我收到以下错误: “此服务器无法验证您是否有权访问URL”/script.php”。您提供了错误的凭据(例如,密码错误),或者您的浏览器不知道如何提供所需的凭据。 如果您被允许请求文档,请检查您的用户ID和密码,然后重试。 如果您认为这是服务器错误,请联系网站管理员。 错误401“
在浏览器中直接键入下面的url,它可以工作, 但是,当我使用相同的url,用于selenium网络驱动程序测试时,它连接到 以及请求HTTP身份验证。我是否需要更改chrome浏览器中的任何设置,或调整默认配置文件?
我正在使用SpringBoot开发具有微服务架构的Rest Backend。为了保护endpoint,我使用了JWT令牌机制。我正在使用Zuul API网关。 如果请求需要权限(来自JWT的角色),它将被转发到正确的微服务。Zuul api网关的“WebSecurityConfigrerAdapter”如下。 这样,我必须在这个类中编写每个请求授权部分。因此,我希望使用方法级安全性,即“Enabl