我将使用Azure AD library for Angular向Azure进行身份验证。
这是我的msalModule
DECLARE @sql varchar(max)
SELECT
@sql = STRING_AGG( CONCAT( 'SELECT * FROM ', [ID] ), CHAR(13) + CHAR(10) )
FROM
Accounts
EXECUTE sp_executesql @sql
当我弹出登录时,输入我的用户ID + PW,我会收到此错误
MsalModule.forRoot({
clientID: "ClientTenantID",
authority: "https://login.microsoftonline.com/common",
redirectUri: "http://localhost:4200/",
consentScopes: [ "user.read", "ClientID/access_as_user"],
popUp: true,
unprotectedResources: ["https://www.microsoft.com/en-us/"],
protectedResourceMap: protectedResourceMap,
logger: loggerCallback,
correlationId: '1234',
level: LogLevel.Info,
piiLoggingEnabled: true
})
我想知道客户ID和同意范围内使用的ID之间有什么区别。
在我的示例中,我在Azure门户-> Azure Active Directory->属性中找到了ClientTenantID
然后,在同意范围内使用的ClientId在Azure门户-> Azure Active Directory->应用程序注册,然后是应用程序ID。
它们是在MSAL中使用的正确ID吗?
答案 0 :(得分:0)
它们是在MSAL中使用的正确ID吗?
简而言之,不,clientID
应该是您在同意范围内使用的AD APP的Application ID
。
在consentScopes
中,应该是需要用户同意的期望范围。 MSAL使Angular(4.3到5)应用程序能够验证企业用户是否可以访问Microsoft Cloud或Microsoft Graph。例如,在您提到的链接consentScopes: ["user.read", "api://a88bb933-319c-41b5-9f04-eff36d985612/access_as_user"]
中,这意味着用户授权广告应用访问api,也可以是https://graph.microsoft.com
等。
在您的文章中,已经对其进行了清晰的解释,
consentScopes :允许客户表达所需的期望范围。范围可以来自多个资源/端点。在此处传递范围仅表示同意,并且在客户端实际调用API之前不会获取访问令牌。如果您仅将MSAL用于登录(身份验证),则这是可选的。
答案 1 :(得分:0)
应将MSAL的'consentScopes'设置为前端客户端所针对的后端API的所需范围;需要访问令牌的API。
因此在下面的图片中,我的有角度的Web客户端称为“ MyCompany-Web-dev”,而我的API则称为“ MyCompany-API-Dev”。
要查找应输入的确切字符串:
转到已注册应用程序的Azure B2C列表。通常至少有两个,一个前端有角度的Web客户端和一个后端API。
单击您的API的应用程序名称(而不是Web客户端)。
这就是配置MSALModule.forRoot({...})的方法。
同样,如果您使用的是MSALService.loginPopup方法,则它看起来像:
MyMsalService.loginPopup([[“ openid”,“ offline_access”,“ https:// mycompany .onmicrosoft.com / api-dev / user_impersonation”])
希望有帮助。