如何在Angular中配置MSAL?

时间:2018-10-11 21:57:14

标签: angular azure azure-active-directory msal

我将使用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

enter image description here

然后,在同意范围内使用的ClientId在Azure门户-> Azure Active Directory->应用程序注册,然后是应用程序ID。

它们是在MSAL中使用的正确ID吗?

2 个答案:

答案 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”。

要查找应输入的确切字符串:

  1. 转到已注册应用程序的Azure B2C列表。通常至少有两个,一个前端有角度的Web客户端和一个后端API。

  2. 单击您的API的应用程序名称(而不是Web客户端)。

  3. 单击“已发布范围”。 enter image description here

  4. “完整范围值”下的值也是MSAL的“ consentScopes”值。 enter image description here

  5. 这就是配置MSALModule.forRoot({...})的方法。
    同样,如果您使用的是MSALService.loginPopup方法,则它看起来像:

    MyMsalService.loginPopup([[“ openid”,“ offline_access”,“ https:// mycompany .onmicrosoft.com / api-dev / user_impersonation”])

希望有帮助。