问题标签 [msal-angular]
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.
angular - 在 Angular-msal2 中使用 Azure idtoken 请求 API 时出现 Cors 错误
我正在使用 angular-msal2 登录到 Azure AD 并访问我在 Azure 上的 webapi。当我运行 http.get 时,它给了我一个 CORS 错误,如下所示:
跨域请求被阻止:同源策略不允许在 https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxxxxxx/oauth2/v2.0/authorize?response_type=id_token&redirect_uri=https%3A%读取远程资源2F%2Fwgceworkflow-as.azurewebsites.net%2F.auth%2Flogin%2Faad%2Fcallback&client_id=xxxx-xxx-xxxx-xxxxxx&scope=openid+profile+email&response_mode=form_post&nonce=9dd0ec527a3a480abbd37e30d6d63499_20210531073718&state=redir%3D%252Fapi%252Fdemo%252Fall . (原因:缺少 CORS 标头“Access-Control-Allow-Origin”)。
有谁知道如何解决这一问题?这个 API 可以很好地与 JavaScript 配合使用,我是 Angular 的新手。
谢谢你。
PS:我知道我仍然可以使用旧方法手动获取 id 令牌并将其添加到标头,但 MS 说“MSAL Angular 包装器利用 HTTP 拦截器自动获取访问令牌,并将它们附加到 HTTP 请求到 API。”,我想知道如何使用此功能。
angular - Angular 中 MSAL 2 的动态配置
对于我的 Angular (v12) 应用程序,我使用 MSAL 进行身份验证,但我遇到了配置问题。
在配置中,我有tenantId 和app Id 来初始化MSAL。
我不能使用标准的 Angular 配置切换,environment.ts
因为它不能在后期构建步骤中更改。
相反,我尝试加载一个 json 文件并在应用程序启动时使用 APP_INITIALIZER 回调调用,如本文所述:如何使用 APP_INITIALIZER 初始化 msal 配置
我对其进行了一些修改,因为MsalAngularConfiguration
MSAL v2 中不再存在。
但它不起作用,在调用MSALInstanceFactory
ConfigService.init 之前完成调用(由 AppComponent 因为它依赖于MsalGuardConfiguration
)。
我也尝试过传入ConfigService
函数msalConfigFactory
,但参数未定义。
我也尝试将代码作为 json 导入,但它不起作用,因为我在构建它时得到了值。
任何想法?
azure-ad-b2c - 由于缺少“配置文件”范围,无法使用带有自定义协议的 MSAL 对 Azure B2C 进行身份验证
下午好,
我目前正在尝试使用 B2C 和以下版本的 msal 库来验证我们的 Angular 客户端应用程序:
我使用此处的指南创建了自定义端点:https ://docs.microsoft.com/en-us/azure/active-directory-b2c/tutorial-create-user-flows?pivots=b2c-custom-policy ,但是每当我尝试加载登录弹出窗口时,都会出现以下错误:
我的 Azure AD B2C 应用程序注册中添加了“openid”和“offline_access”权限,但据我所知,没有“配置文件”这样的范围,因为我找不到它来添加它。此外,我没有在网上看到这个错误,这让我觉得我遗漏了一些东西,但复习它似乎没有帮助。有谁知道我错过了什么?
编辑- 如果我将以下内容添加到我的自定义协议中:
该错误消失了,但我得到了错误:
事实并非如此。
Edit2 - 我不确定为什么以前的应用注册中没有显示“个人资料”,但我能够创建一个新的并添加个人资料权限,但我仍然收到同样的错误。
Edit3 - 如果仅通过拦截和修改它指定“openid”范围,然后再次发送它,我已经确认发送的授权请求有效。最可能的原因是因为发现端点只在“scopes_supported”下指定了“openapi”,我已经尝试了所有我能想到的东西,并搜索了文档以了解如何添加到这个变量中,但却空手而归。如果有人知道如何更新自定义协议的范围,请告诉我
angular - 如何在 App.module 中以角度分配和使用运行时配置值
我有一种情况,我需要用 app.module 中的 config.json 值替换一些硬编码值。我们能做到吗?
能够添加 APP_INITIALIZER 和 useFactory 并能够在其他组件中注入服务,并且工作正常但无法在 app.module 中实现。
我想用我在 APP 模块中创建的运行时配置替换一些 MSAL 客户端和其他属性,但它提供了 CE。
正在低于编译时错误:
错误:src/app/app.module.ts:49:11 - 错误 TS2322: 类型 'string | undefined' 不能分配给类型 'string'。类型“未定义”不可分配给类型“字符串”。
49 clientId:appConfig.clientId,~~~~~~~~
node_modules/@azure/msal-browser/dist/config/Configuration.d.ts:21:5 21 clientId: string; ~~~~~~~~ 预期的类型来自属性'clientId',它在'BrowserAuthOptions'类型上声明
错误:src/app/app.module.ts:49:21 - 错误 TS2454:变量 'appConfig' 在被分配之前被使用。
49 clientId: appConfig.clientId,
angular - 有没有办法知道 msal 重定向何时正在进行?
我使用 @azure/msal-browser 和 @azure/msal-angular 包来简单地为我的登录用户检索 MSAL 令牌。由于我真正需要的只是令牌,因此我只在 app.module.ts 中提供了 MsalService 和 MSAL_INSTANCE。我正在使用重定向流,并选择自己订阅 .handleRedirectObservable() 方法,而不是使用 MsalRedirectComponent (以便我确切知道令牌何时可用)。
我的问题是,当重定向发生并且我被转发回我的应用程序时,有一段时间我的应用程序正在运行,但重定向交互仍未完全完成。如果我允许我的应用程序此时实际开始运行,它有可能会在令牌真正存在之前尝试使用它并导致错误。因此,我必须定义一个名为 isInteractionInProgress 的方法,并在实际开始执行我的应用程序之前在我的 app.component.ts 中调用它:
由于我不知道生成 msal-angular 库用于存储“interaction_in_progress”值的密钥的可靠方法,因此我必须自己遍历会话存储并查找此密钥。如果它存在,那么我的应用程序知道一个 MSAL 令牌正在发送中,它需要等待。
有没有更好的解决方案?似乎这应该是我需要的:
但它所做的只是在“无”上激活两次,第二次“无”似乎是令牌实际可用的时候,但我不确定这是否属实。
那么有没有一种可靠的方法可以知道重定向何时实际发生?谢谢!
ionic-framework - 带有 Microsoft SSO 的 Ionic 5 电容器
我正在尝试使用 Ionic 5 实现 Microsoft SSO,但没有运气。我曾尝试使用@azure/msal-angular @azure/msal-browser方法,但这似乎只适用于 web。最近有没有人尝试实现这一点?
这是我在 XCODE 中遇到的错误
microsoft-graph-api - 为我们的 API 服务器获取授权码或刷新令牌
我有一个通过 Microsoft 帐户执行用户身份验证的 Angular 应用程序。为此,我使用了 MSAL JS 库,它可以很好地验证用户身份。但是我们有后端服务器需要调用 Microsoft Graph API 的要求。现在的问题是 MSAL 库返回的 access_token 的生命周期为 1 小时,因此一旦它从我们的后端服务器过期就无法使用。
所以我正在寻找一种可以获取授权码的方法,该授权码可以从我们的后端服务器交换以获取访问令牌和刷新令牌。由于我们也获得了刷新令牌,因此只要考虑到刷新令牌仍然有效,我们就可以在访问令牌过期时刷新它。
我不确定这是否可以通过 MSAL 库实现,或者是否有任何其他可用于 SPA 的替代方案来支持这种情况,我已经在上面进行了描述。
angular - 从 API 获取 MSAL 拦截器配置
对于静态 Web 应用程序 (SPA),我配置了一个端点/api/settings。此端点不需要身份验证,并返回应用程序中需要的其他端点的列表。现在的问题是,/api/settings返回的这些端点确实需要身份验证。
在下面的代码中,我需要配置/api/settingsprotectedResourceMap
的响应。我试图为提供者建立一个工厂,但我认为它不起作用,因为它最终处于循环依赖中。MSAL_INTERCEPTOR_CONFIG
有没有人有protectedResourceMap
从 API 响应创建的解决方案?另一种方法是在请求端点时手动附加令牌,但我也找不到这样做的方法。
.net - 将 msal.net 与 msgraph 一起使用,而不是当前经过身份验证的用户
我有类似的情况,例如为我们的 API 服务器获取授权代码或刷新令牌:
我们已经分离了注册用户,这些用户在我们的 SPA 和后端服务之间进行了身份验证。
现在我需要允许后端服务通过 Microsoft Graph 从他的企业帐户中读取用户的电子邮件。
所以我的猜测是让用户通过 SPA 中的 msal.js 同意这一点,并将身份验证信息发送回我们的后端服务(例如刷新令牌)。然后使用令牌代表业务帐户调用 MsGraph-Api。
问题出在后端服务中,该用户已经被认证为我们的用户(而不是企业帐户)。所以我不能使用任何 Microsoft.Identity.Web 事物,因为它们基于令牌缓存。此令牌缓存要么由 Microsoft.Identity.Web 事物使用 HttpContext 填充,要么通过从 db 读取缓存(例如 AddDistributedSqlServerCache)来填充
我找不到一种方法来使用来自业务帐户的身份验证信息以包含在缓存中(这也会让我刷新令牌)或找到一种简单的方法来告诉 msal.net 我有完整的用户信息可以使用.