- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在使用 Azure AD 验证我的单页应用程序 (Angular4),并为此使用 Adal.js。在登录页面上,我单击一个重定向到 Microsoft AAD 的按钮,成功登录后它重定向回应用程序主页,并收到 id_token
。以及来自 JWT 的用户信息。
我需要 access_token
用于后端 API 访问,我试图通过 ADAL AuthenticationContext
获取的 getCachedToken()
方法,并将 clientId 作为参数发送:
this.context.getCachedToken(this.configService.AdalConfig.clientId)
但此方法返回与 id_token (adal.idtoken)
存储在 session 存储中的相同 token .它基本上通过一个连接键在 session 存储中创建一个新项目,该键与 id_token
具有相同的值。
adal.access_token.key + clientId = id_token
例如:adal.access_token.key239f6fc7-64d2-3t04-8gfd-501efc25adkd = <id-token-value>
.
我还尝试获取 access_token
与 AuthenticationContext.acquireToken()
方法,但它也给出了 id_token
回来。
我哪里错了?
编辑:发布代码。我正在调用函数 login()
,登录成功后,尝试通过get accessToken()
获取主页中的访问 token adal.config.ts
中的属性访问器.
config.service.ts
import { Injectable } from '@angular/core';
@Injectable()
export class ConfigService {
constructor() {}
public get AdalConfig(): any {
return {
tenant: 'common',
clientId: <application-id>,
redirectUri: window.location.origin + '/',
postLogoutRedirectUri: window.location.origin + '/'
};
}
}
adal.service.ts
import { ConfigService } from './config.service';
import { Injectable } from '@angular/core';
import { adal } from 'adal-angular';
let createAuthContextFn: adal.AuthenticationContextStatic = AuthenticationContext;
@Injectable()
export class AdalService {
private context: adal.AuthenticationContext;
constructor(private configService: ConfigService) {
this.context = new createAuthContextFn(configService.AdalConfig);
}
login() {
this.context.login();
}
logout() {
this.context.logOut();
}
handleCallback() {
this.context.handleWindowCallback();
}
public get userInfo() {
return this.context.getCachedUser();
}
public get accessToken() {
return this.context.getCachedToken(this.configService.AdalConfig.clientId);
// return this.context.acquireToken(this.configService.AdalConfig.clientId, function(message, token, response) {
// console.log(message, token, response);
// });
}
public get isAuthenticated() {
return this.userInfo && this.accessToken;
}
}
最佳答案
实际上,经过一些阅读后发现,将 SPA 连接到 Azure AD 需要 OAuth 2.0 隐式授权流程。 Microsoft documentation说:
In this scenario, when the user signs in, the JavaScript front enduses Active Directory Authentication Library for JavaScript (ADAL.JS)and the implicit authorization grant to obtain an ID token (id_token)from Azure AD. The token is cached and the client attaches it to therequest as the bearer token when making calls to its Web API back end,which is secured using the OWIN middleware.
所以,我需要发送到后端 API 的是 id_token
本身,它反过来可以被验证和使用。提供了有关验证的更多信息 here :
Just receiving an id_token is not sufficient to authenticate the user;you must validate the id_token's signature and verify the claims inthe token per your app's requirements. The v2.0 endpoint uses JSON WebTokens (JWTs) and public key cryptography to sign tokens and verifythat they are valid.
You can choose to validate the id_token in clientcode, but a common practice is to send the id_token to a backendserver and perform the validation there. Once you've validated thesignature of the id_token, there are a few claims you will be requiredto verify.
关于javascript - 尝试使用 ADAL.js AuthenticationContext 获取访问 token 时,access_token 与 id_token 相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47234519/
我希望能够以编程方式从 Azure 获取 token 。 我调用 GetAToken().Wait(); 但失败了。 方法是: public async Task GetAToken() {
使用 ADAL 库获取 WAAD token ,我想知道如何更好地控制登录流程。 var ac = new AuthenticationContext("https://login.windows.n
我正在尝试使用 Microsoft Power BI REST API,但由于我对该 API 的经验不是很丰富,所以没有取得多大进展 据我了解,身份验证上下文是身份模型事件目录的一部分,我会三次检查它
首先,我不确定这是否重要,但由于@Simon Mourier 在 him answer 中提到的原因,我正在使用 ADAL 的实验版本, this one . 在下面的代码中,我想同步获取一个Auth
使用 Azure Active Directory 图形客户端 API,如何配置底层 HttpClient 以使用 HttpClientHander,在其中我可以定义经过身份验证的应用程序代理? va
使用 Azure Active Directory 图形客户端 API,如何配置底层 HttpClient 以使用 HttpClientHander,在其中我可以定义经过身份验证的应用程序代理? va
我有一个在 Multi-Tenancy 场景中使用的 native 应用程序。为了对用户进行身份验证——并征得他们同意允许此应用程序代表他们访问 Azure——我只需实例化一个 Authenticat
我正在构建一个 WPF 应用程序,并且现在每次启动时都使用 ADAL 中的 AuthenticationContext,并且希望以某种方式缓存访问 token ,而不必在每次应用程序启动时提示用户。
ADAL library for Windows Phone 8.1 的实现示例可以在 GitHub 上找到 要为调用AuthenticationContext.AcquireTokenAndCont
我目前正在尝试连接到我的 AD 以接收缓存的用户/ token 或我自己的 Vue.js 应用程序在我的团队应用程序中的新 token 。 到目前为止,我已经创建了一个 Teams 应用程序来获取我的
我正在使用 ADAL.js 获取 Azure 资源的 token 。 为此,我编写了以下代码: var endpoints = {
我想运行 Java 代码以在 Windows 服务器中使用代理读取 Azure KeyVault。 我浏览了很多帖子,但可以找到任何可行的解决方案。主要针对 c#,但我想要针对 Java。我的代码在本
我正在关注 tutorial用于通过 AAD 对 Power BI REST API 进行身份验证。 本教程使用 C# 和 ADAL。它通过以下方式获取 token , AuthenticationC
当我从 Windows 应用商店应用 HTML/Javascript 调用 AuthenticationContext 方法时,出现错误。 代码如下: var adal = Microsoft.Ide
我使用 Angular1 构建了一个小型测试应用程序,该应用程序使用 ADAL 连接到 Office365 租户。由于我希望开始包含 Angular2 组件,因此我尝试使用 JSPM 和 System
如果我错过了这篇文章中的某些内容,我深表歉意,因为我在阅读了几个小时后已经束手无策。 我正在尝试编写一个后端服务 (Windows),它将通过 Azure AD 连接到 MS Graph API。我正
我正在使用 Azure AD 验证我的单页应用程序 (Angular4),并为此使用 Adal.js。在登录页面上,我单击一个重定向到 Microsoft AAD 的按钮,成功登录后它重定向回应用程序
我是一名优秀的程序员,十分优秀!