标签: msal.js

什么重定向与 MSAL 一起用于 Chrome 扩展?

我正在编写一个需要访问需要 AAD 访问令牌的 ASP.NET Core Web API 的 Chrome 扩展程序。我正在尝试使用msal NPM 包提供身份验证流程,以便用户可以使用他们现有的 AAD 帐户登录我的扩展程序,从而为我的扩展程序提供所需的访问令牌。

我得到了一个让用户登录的弹出窗口,但在我的扩展程序获取令牌之前,弹出窗口显示此错误:

ERR_UNSAFE_REDIRECT

我猜这是因为 https 页面试图重定向回带有chrome-extension://方案的 URL 。但是我该怎么做呢?这是我现在的代码:

    var userAgentApplication = new Msal.UserAgentApplication(applicationConfig.clientId, applicationConfig.authority, authCallback, {
        redirectUri: chrome.extension.getURL('popup.html'),
        cacheLocation: 'localStorage',
    });
    const idToken = await userAgentApplication.loginPopup(applicationConfig.scopes);
Run Code Online (Sandbox Code Playgroud)

azure-ad-msal msal.js

3
推荐指数
1
解决办法
796
查看次数

获取Azure AD V2端点的访问令牌时如何指定资源URI?

我在之前的项目中使用了ADAL.js,该项目仅支持工作帐户,并且能够成功获取idtokens,然后访问API(ResourceURI:" https://myresource.com ").工作良好.

现在,我正在尝试将MSAL.js用于另一个项目,因为我需要支持工作帐户(aad auth)个人"Microsoft帐户"(MSA).我现在遇到问题,试图做同样的事情,就像在我的ADAL项目中一样.

"资源"的概念似乎从AAD V2中消失了.那么在获取目标API的访问令牌时如何指定资源URL?因此,生成的accesstoken包含AUD声明中的ResourceURI(将由我调用的API强制执行).

如果我强制添加Resource querystring参数,那么:

msalapp.acquireTokenSilent([], null, null, "resource=https%3A%2F%2Fmyresource.com")

我收到以下错误:

AADSTS901002: The 'resource' request parameter is not supported.

文档说使用SCOPE代替.但使用:

msalapp.acquireTokenSilent(['https://myresource.com'])

结果是:

AADSTS70011: The provided value for the input parameter 'scope' is not valid. The scope https://myresource.com openid profile is not valid. The scope format is invalid. Scope must be in a valid URI form <https://example/scope> or a valid Guid <guid/scope>..

那么:在通过MSAL.js使用v2端点时,如何在获取访问令牌时指定资源URI?对不起,(通常很不错)MSDN文章在这种情况下完全没用...

azure-active-directory adal adal.js azure-ad-msal msal.js

3
推荐指数
1
解决办法
3108
查看次数

如何知道给定的用户是否已经使用MSAL登录?

使用msal.js库(Microsoft身份验证库),哪种方法可以知道给定用户是否已经登录?我的意图是如果用户的凭据已经保存在浏览器的存储中,则避免显示登录弹出窗口

我目前的做法:

function isUserLoggedIn(username) {
 const agent = msal.UserAgentApplication(...);
 const user = agent.getUser();
 return user != null && user.displayableId === username);
}
Run Code Online (Sandbox Code Playgroud)

但是我不确定是否必须检查用户凭据是否已过期/过期。哪个是正确的方法?

azure-ad-msal msal.js

3
推荐指数
2
解决办法
1050
查看次数

Azure AD Oauth2 隐式授予多个范围

我有许多 AngularJS 应用程序,它们访问许多 NodeJS 托管的 API。我想用 Azure AD 隐式授权替换定制授权框架(长话短说我是如何到达那里的..)

目前正在经历 POC(基于Microsoft 示例),并且在获取用于 API 数量的单个访问令牌时遇到了问题

UI 和 API 均已在 AZURE AD 应用程序中注册。还配置了一些权限,以便他们有权调用 API,例如https://graph.windows.net/User.Read api://xxx-xxx-xxxx-xx-xxxx/sales.admin

然后我在客户端定义

var requestObj = {
    scopes: ["https://graph.windows.net/User.Read", "api://xxx-xxx-xxxx-xx-xxxx/sales.admin" ]
};
Run Code Online (Sandbox Code Playgroud)

所以我天真地以为我能够获得一个可以针对多个 API 使用的访问令牌

然而,看起来情况并非如此。客户端应用程序必须为应用程序需要访问的每个 API 创建单独的访问令牌。

这是正确的吗 ?这增加了客户端的复杂性,因为它需要维护和刷新这些令牌。

我是否遗漏了“架构”上的某些内容,例如 API 管理层?

谢谢

缺口

node.js oauth-2.0 azure-active-directory azure-ad-msal msal.js

3
推荐指数
1
解决办法
5660
查看次数

MSAL Angular - 通过 document.location.origin 进行动态重定向 Url 配置不适用于 AOT

我正在编写一个 Angular 应用程序,同时尽力避免根据环境变量重建我的项目。对于基本的后端 API 调用,分别使用document.location.origin和/或非常容易window.location.origin。引用托德·霍华德最臭名昭著的一句话:“它就是有效”。我必须承认,到目前为止,我的应用程序需要解决相当简单的问题,因此我缺乏一些中间概念的知识。然而,最终客户希望使用 MSAL 库将其用作备用 Active Directory,并为了方便“单点登录策略”。我忽略了在生产性构建中尝试它,意识到我不能像这样使用它......

 MsalModule.forRoot({
      auth: {
        clientId: '<my_client_id>',
        authority: '',
        redirectUri: window.location.origin,
        postLogoutRedirectUri: window.location.origin + "/login"
      },
      cache: {
        cacheLocation: 'localStorage',
        storeAuthStateInCookie: isIE, // set to true for IE 11
      },
    },
Run Code Online (Sandbox Code Playgroud)

我还没有看到太多类似案例的应用解决方案。我发现这个特定问题的唯一原因是通过这个 git-issue 帖子

https://github.com/angular/angular-cli/issues/10957

我的问题是,有没有办法为 AOT 构建提供窗口对象?

azure-ad-msal angular msal.js

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

使用 MSAL.js 和 Azure Active Directory 保护 SPA 中的 REST API 调用 - 如何将身份验证令牌传递给承载策略

我正在使用 React 和 Express 创建一个 SPA。我正在尝试使用 MSAL.js 进行身份验证,并查看了Microsoft 的 SPA 教程。我已经能够使用@msal-react 通过 React 实现这一点。虽然这确实执行了身份验证,但它并不能保护 REST API 免受未经身份验证的用户的访问。

我发现Active Directory Javascript Nodejs Web API似乎提供了一种使用 Passport 和 Bearer 策略保护 REST API 的方法,但显示如何将其与客户端结合的链接似乎已损坏。

我不确定如何将客户端发生的身份验证与 REST API 连接起来。据我了解,必须传递身份验证令牌,但我不确定如何传递。

服务器端示例代码有:

// API endpoint exposed
app.get("/api",
    passport.authenticate('oauth-bearer', {session: false}),
    (req, res) => {
        console.log('Validated claims: ', req.authInfo);

        // Service relies on the name claim.  
        res.status(200).json({
            'name': req.authInfo['name'],
            'issued-by': req.authInfo['iss'],
            'issued-for': req.authInfo['aud'],
            'scope': req.authInfo['scp']
        });
    }
);
Run Code Online (Sandbox Code Playgroud)

我在客户端尝试做的是获取帐户信息:

import {
  useAccount,
  useMsal
} …
Run Code Online (Sandbox Code Playgroud)

authentication azure azure-active-directory passport.js msal.js

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

来宾用户的角色在 Azure Active Directory 身份验证令牌声明中不可见

我正在构建一个使用 Microsoft 身份验证库(MSAL)来管理用户身份验证的应用程序。我一直在测试邀请用户并使用 AAD 企业应用程序向他们应用应用程序角色。当应用程序目录外部的用户(通用 Microsoft 帐户)登录到应用程序时,他们不会在其身份验证令牌中收到任何角色声明。

我尝试关闭外部协作设置中显示“来宾用户权限受到限制”的设置,但这并没有产生任何影响。

我将不胜感激任何帮助,谢谢。

azure-active-directory msal.js

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