我正在编写一个需要访问需要 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) 我在之前的项目中使用了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文章在这种情况下完全没用...
使用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)
但是我不确定是否必须检查用户凭据是否已过期/过期。哪个是正确的方法?
我有许多 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
我正在编写一个 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 构建提供窗口对象?
我正在使用 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
我正在构建一个使用 Microsoft 身份验证库(MSAL)来管理用户身份验证的应用程序。我一直在测试邀请用户并使用 AAD 企业应用程序向他们应用应用程序角色。当应用程序目录外部的用户(通用 Microsoft 帐户)登录到应用程序时,他们不会在其身份验证令牌中收到任何角色声明。
我尝试关闭外部协作设置中显示“来宾用户权限受到限制”的设置,但这并没有产生任何影响。
我将不胜感激任何帮助,谢谢。