我正在尝试使用Angular SPA(单页面应用程序)网站adal.js,该网站从外部Web API站点(不同的域)获取数据.使用adal.js可以很容易地对SPA进行身份验证,但是当需要承载令牌时,让它与API通信是根本不起作用的.除了无数博客之外,我还使用https://github.com/AzureAD/azure-activedirectory-library-for-js作为模板.
问题是,当我在启动adal.js时设置端点时,adal.js似乎将所有传出端点流量重定向到microsofts登录服务.
观察:
我的理论是adal.js无法检索端点的令牌(可能是因为我在SPA中配置了错误)并且它停止了到端点的流量,因为它无法获得所需的令牌.SPA令牌不能用于API,因为它不包含所需的权限.为什么adal.js没有为端点获取令牌,我该如何解决?
附加信息:
会话存储:
key (for the SPA application): adal.access.token.keyxxxxx-b7ab-4d1c-8cc8-xxx value: eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1u...
key (for API application): adal.access.token.keyxxxxx-bae6-4760-b434-xxx
value:
Run Code Online (Sandbox Code Playgroud)
app.js(Angular和adal配置文件)
(function () {
'use strict';
var app = angular.module('app', [
// Angular modules
'ngRoute',
// Custom modules
// 3rd Party Modules
'AdalAngular'
]);
app.config(['$routeProvider', '$locationProvider',
function ($routeProvider, $locationProvider) {
$routeProvider
// route for the home page
.when('/home', …
Run Code Online (Sandbox Code Playgroud) 我正在为公司试用Azure AD B2B功能。我试图通过门户并使用https://graph.microsoft.com/beta/invitations邀请外部用户。在两种情况下,都成功地邀请了用户并将其添加到我们的目录中。登录适用于社交帐户(然后使用Microsoft帐户)。如果它是一个非社交帐户(又名contoso.com),并且以前没有Azure AD,则当我们的应用程序尝试登录用户时,我会得到一个access_denied。如果我尝试强制达成同意流程,则会收到以下消息:
AADSTS65005:您的公司aaa.no当前不支持应用程序zzz。您的公司目前处于不受管理的状态,需要管理员通过aaa.no的DNS验证来声明对公司的所有权,然后才能配置应用程序zzz。
我们有许多小型公司作为客户,似乎它们在用户使用我们的应用程序之前都必须对Azure AD目录进行管理似乎是不合理的。根据微软的说法,它应该是无缝的:
无缝:需要访问您的公司应用程序的合作伙伴公司不需要Azure AD。Azure AD B2B协作提供了简单的用户注册体验,使这些合作伙伴可以立即访问您的应用程序。
如果他们可以注册并创建他们的用户和目录,为什么他们不能让他们被邀请的应用程序同意登录(该应用程序需要登录并读取用户配置文件委托权限)?
我们已经允许拥有自己的托管Azure AD的公司在我们的应用程序中使用其用户。我们获得了全球管理员的同意,以便管理员同意我们的应用程序,以便他们可以登录用户并读取目录数据。这些用户未添加到我们的目录中,并且可以正常工作。
另外,如果我以受邀用户的身份转到新门户,则可以看到域aaa.no已验证,但是无法将其设置为主域。
我尝试过的其他方法不起作用:升级到最新的ADAL版本,尝试在https://apps.dev.microsoft.com中创建应用程序并使用它,尝试在旧的Azure门户中设置权限(似乎是一个错误在清单中未显示权限的新门户中),并尝试使该应用程序成为单租户。没用。