小编Bjø*_*sen的帖子

Adal.js没有为外部api端点资源获取令牌

我正在尝试使用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会话存储包含两个adal.access.token.key条目.一个用于SPA Azure AD应用程序的客户端ID,另一个用于外部API.只有SPA令牌具有值.
  • 如果我没有将$ httpProvider注入到adal.js中,那么调用将转到外部API并获得401作为回报.
  • 如果我手动将SPA令牌添加到http标头(授权:承载'令牌值'),我得到401作为回报.

我的理论是adal.js无法检索端点的令牌(可能是因为我在SPA中配置了错误)并且它停止了到端点的流量,因为它无法获得所需的令牌.SPA令牌不能用于API,因为它不包含所需的权限.为什么adal.js没有为端点获取令牌,我该如何解决?

附加信息:

  • 客户端Azure AD应用程序配置为对应用程序清单中的API和oauth2AllowImplicitFlow = true使用委派权限.
  • API Azure AD应用程序配置为模拟和oauth2AllowImplicitFlow = true(不要认为这是必需的,但尝试过它).这是多租户.
  • API配置为允许所有CORS起源,并且当其他Web应用程序使用模拟(混合MVC(Adal.net)+ Angular)时,它可以正常工作.

会话存储:

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)

adal.js

16
推荐指数
1
解决办法
1万
查看次数

来自不受管理的Azure AD目录的用户可以登录到位于其他目录中的Azure AD多租户应用程序吗?

我正在为公司试用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门户中设置权限(似乎是一个错误在清单中未显示权限的新门户中),并尝试使该应用程序成为单租户。没用。

azure-active-directory adal microsoft-graph

2
推荐指数
1
解决办法
2293
查看次数