问题标签 [msal.js]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1672 浏览

angular - msal.js angular 6 SPA 回调和错误处理

我在 Angular 6 SPA 上使用 msal.js 来处理身份验证,我有一些问题:首先,我找不到一个关于如何处理 lib 错误的明确示例,所以我左右挑选了一些东西,然后我到了到下一个结果:

getAuthenticationToken 函数用于我的 httpinterceptor 来设置不记名令牌。这工作正常,除非我的令牌过期发出下一个错误:

main.c20e047e67b91051727f.js:1 AADB2C90077:用户没有现有会话并且请求提示参数的值为“无”。相关 ID:3a627592-5ab0-4e54-b01d-e4296e4d4002 时间戳:2018-11-27 08:30:32Z |interaction_required

在我尝试处理这种情况时,您可以看到回调检查错误代码内容。问题是,在acquireTokenSilent 失败后从未调用过我的回调......我想知道为什么以及我做错了什么?对于acquireTokenSilent,我猜您可以将错误处理为承诺拒绝。虽然不理想。

其次,回调中的上下文与我的服务不一样,我无法访问“this”,从我读过的内容来看,它被库覆盖了。我对“AADB2C90118忘记密码错误”的临时破解是用适当的权限创建一个新的userAgentAplication,有没有办法在回调中访问我的服务上下文并避免这样做?

编辑我设法使事情顺利进行:“this”在回调中引用了 userAgentApplication 本身,因此您可以执行以下操作,而不是创建新的:

或将此绑定到您的回调:

和我的拦截器:

对于信息,我使用最新的“msal”:“^0.2.3”、“typescript”:“~2.7.2”、“@angular/core”:“^6.0.3”。

0 投票
1 回答
13399 浏览

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

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

现在,我正在尝试将 MSAL.js 用于另一个项目,因为我需要同时支持工作帐户(aad auth)个人“Microsoft 帐户”(MSA)。我现在正在尝试做与我的 ADAL 项目相同的事情时遇到问题。

“资源”的概念似乎从 AAD V2 中消失了。那么在获取目标 API 的访问令牌时如何指定 Resource url?这样生成的访问令牌包含 AUD 声明中的 ResourceURI(这将由我正在调用的 API 强制执行)。

如果我强制添加资源查询字符串参数,因此:

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 文章在这种情况下根本没有用......

0 投票
2 回答
2008 浏览

c# - 验证多租户 .Net Core Web API 应用程序的颁发者的适当位置

我正在开发一个多租户 SPA 应用程序,它为数据调用后端 .Net Core Web API。前端 UI 将使用 MSAL 和 Microsoft 的 v2 通用端点针对 AAD 对用户进行身份验证并获取 id 和访问令牌。

在我的 Web API 中,我想验证颁发者,但如此所述,使用公共端点提供的元数据使正常的颁发者验证无法使用。

我已经看到对几个可以覆盖或自定义令牌验证的地方的引用,但我不确定哪个是首选,或者这些方法中的任何一个是否会导致不希望的副作用。

一种方法使用 JwtBearer 选项的事件:options.Events.TokenValidated另一种方法使用 TokenValidationParameters 的IssuerValidator委托。

除了确保发行者存在于我的已验证发行者数据库中之外,我不想编写任何令牌验证逻辑。这个逻辑应该放在IssuerValidatoror中TokenValidated吗?

我当前的代码如下所示(当前为单租户设置)

我在 using 中看到的一个问题IssuerValidator是,似乎没有一种方法可以注入或传递对能够在数据库中查找租户 ID 所需的 dbContext 的引用。

有没有人解决过这个问题或做过类似的事情?

0 投票
1 回答
1339 浏览

azure-ad-b2c - 使用 msal.js,Safari(桌面/iOS)的用户需要登录两次

我在我的网络应用程序上使用 azure b2c 和 msal.js 来处理我的网络应用程序上的身份验证。

当用户单击登录时,我正在使用所需范围调用 msal.js 库中的登录 api。

这按预期工作。但是,当用户尝试创建 API 时,我的代码调用 msal.js 的获取令牌静默 api,这在 Safari 中每次都会失败。我相信这是由于 Safari 中的 iFrame 安全策略。当我在 Safari 中关闭“防止跨站点跟踪”时,一切正常。

上面的代码尝试以静默方式获取令牌失败,然后调用acquireTokenPopup,它可以工作,但会首先将用户重定向到再次登录。

有没有办法要求用户登录两次?据我了解,登录调用仅返回一个 ID 令牌,这不适合进行 api 调用,因为我应该使用访问令牌。

如果有帮助,这是网络应用程序:link

0 投票
1 回答
1061 浏览

angular - 使用 Azure AD B2C 时向 Angular SPA 和 MSAL 添加角色

将 Angular 7 与 MSAL.js 和 Azure AD B2C 结合使用。

Azure AD B2C 不直接支持实施基于角色的身份验证,需要使用 Azure Ad Graph API。

https://feedback.azure.com/forums/169401-azure-active-directory/suggestions/10123836-get-user-membership-groups-in-the-claims-with-ad-b

Azure Active Directory B2C 中的按组授权

有没有办法将 MSAL 与 Azure AD Graph API 一起使用来支持角色(通过声明或 Azure AD B2C 安全组)?

0 投票
0 回答
37 浏览

javascript - OAuth 登录流程:如何在我自己的后端创建用户?

我们有一个 Web 应用程序可以满足一小部分用户的需求,这些用户可以保证在 Office 365 上拥有一个帐户。

为了避免他们记住一个密码,并使用 Microsoft 的 OAuth 基础架构,我们决定允许他们使用 Outlook 凭据登录。

这是一个反应应用程序,我们正在使用该msal库,并且我们已经成功地能够从 Microsoft 接收 accessToken。(因此,验证用户的身份。)

我现在不困惑的是我应该如何处理该令牌:

  1. 我需要有自己的用户数据库。我应该在其中存储哪些信息?我也应该存储 access_token 吗?

  2. 如何在我的后端服务器上验证用户的身份?

基本上,管理这种场景的理想方法是什么?其中第三方认证器仅用于(且仅)用于确认用户的身份并仅获取姓名、头像和其他内容。

任何对现有工作流程的引用或对所涉及步骤的解释都将受到高度赞赏。

0 投票
1 回答
566 浏览

azure-active-directory - 在 Dynamics 365 Web 资源中托管的 React 应用 SSO 中的访问令牌

我有一个 Reactjs 应用程序(又名单页应用程序),它作为 Web 资源上传到 Dynamics 365 Customer Engagement(以前称为 CRM)。此 Web 资源或应用程序显示在实体表单内的 IFRAME 中,因此此小型应用程序已经可以使用 Xrm 对象直接访问 Dynamics 365 数据。都好。

我试图用这个应用程序完成的是让它通过 Microsoft Graph API 连接到 SharePoint 并上传文件和创建文件夹。

由于用户已经登录到 Dynamics 365 和 Azure AD(我猜),没有必要向用户显示另一个弹出登录屏幕。

在 msal wiki中,有 2 个附加参数可以传递给 ,userAgentApplication以通知 AAD 用户已经登录并且它们是login_hintdomain_hint。我传递了这两个参数,但没有任何反应。请注意,在下面的代码段中,我放置了日志。只有componentWillMount,beforeafter被记录在控制台中。

不确定这里缺少什么。

0 投票
2 回答
4156 浏览

javascript - MSAL Angular 7:密码重置实现

我正在使用这个 MSAL 库 ( https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular ) 进行身份验证。

对于密码重置,我的代码如下:

到目前为止,一切正常。

密码重置后,用户被引导回 app.component,然后调用 loginRedirect() 来显示登录表单。

返回到 app.component 时会记录以下错误:

“拒绝在框架中显示‘ https://...signupsignin/ ’,因为它将‘X-​​Frame-Options’设置为‘拒绝’”。

理想情况下,我想在密码重置后自动登录用户。

请告知这是否可能,或者至少我如何在无需修改 MSAL 库的情况下摆脱上述错误。

0 投票
1 回答
8327 浏览

azure-ad-b2c - msal.js - 注销而不重定向

是否可以在不重定向的情况下注销?

每次我注册用户时,我都需要验证用户是否在外部数据库(带有邀请令牌的数据库)中。我是在注册完成后才做的。当我发现不应该允许用户登录时,我需要调用logout以清除登录弹出窗口中的 cookie/存储(如果我在再次打开 singin 弹出窗口后不这样做,天蓝色会尝试自动登录用户并且不允许,例如,再次注册)。在我的情况下,页面的刷新是不必要的,因为这是一个注册过程,我已经在登录页面看到它刷新的内容。

0 投票
2 回答
9983 浏览

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

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

我目前的做法:

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