Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Angular中配置MSAL?_Angular_Azure_Azure Active Directory_Msal - Fatal编程技术网

如何在Angular中配置MSAL?

如何在Angular中配置MSAL?,angular,azure,azure-active-directory,msal,Angular,Azure,Azure Active Directory,Msal,我将使用Angular对Azure进行身份验证 这是我的msalModule MsalModule.forRoot({ clientID: "ClientTenantID", authority: "https://login.microsoftonline.com/common", redirectUri: "http://localhost:4200/", consentScopes: [ "user.read", "ClientID/access_as_user"],

我将使用Angular对Azure进行身份验证

这是我的msalModule

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+PW,我得到这个错误

AADSTS50000: There was an error issuing a token.
我想知道客户ID和同意范围上使用的ID之间有什么区别

在我的示例中,我在Azure portal-->Azure Active Directory-->propreties中找到了ClientTenantID

然后,同意范围中使用的客户端ID位于Azure门户-->Azure Active Directory-->应用程序注册中,然后是应用程序ID

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

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

简而言之,否,
clientID
应该是您在同意范围内使用的广告应用程序的
应用程序ID

同意范围
中,应该是需要用户同意的所需范围。MSAL使Angular(4.3到5)应用程序能够验证企业用户是否能够访问Microsoft Cloud或Microsoft Graph。例如,在您提到的链接中,
approvescopes:[“user.read”api://a88bb933-319c-41b5-9f04-eff36d985612/access_as_user“]
,表示用户授权广告应用程序访问api,也可以是
https://graph.microsoft.com

在你的文章里已经解释清楚了,

同意范围:允许客户端表示应同意的所需范围。作用域可以来自多个资源/端点。在这里传递作用域只会同意它,并且在客户端实际调用API之前不会获取访问令牌。如果您仅将MSAL用于登录(身份验证),则此选项是可选的


MSAL“同意范围”应设置为前端客户端目标后端API的所需范围;它需要访问令牌的API

因此,在下面的图片中,我的angular web客户端称为“MyCompany web dev”,我的API称为“MyCompany API dev”

要查找应输入的确切字符串,请执行以下操作:

  • 转到Azure B2C注册应用程序列表。通常至少有两个,一个前端web客户端和一个后端API

  • 单击API的应用程序名称(而不是web客户端)

  • 单击“已发布范围”。

  • “完整范围值”下的值也是MSAL“同意范围”的值。

  • 这就是如何配置MSALModule.forRoot({…})。
    类似地,如果您使用的是MSALService.loginPopup方法,则它将如下所示:

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


  • 希望能有所帮助。

    我已将我的同意范围更改为
    同意范围:[“User.Read”https://graph.microsoft.com/“]
    如您所述,但我不确定这是否正确。这是我现在收到的错误消息<代码>为输入参数“scope”提供的值无效。作用域用户。读取https://graph.microsoft.com/ openid配置文件无效。作用域格式无效。作用域必须是有效的URI格式或有效的Guid。现在我收到以下消息:>名为
    https://graph.microsoft.com/v1.0 在名为租户ID(非客户端ID)的租户中找不到。如果应用程序尚未由租户的管理员安装或租户中的任何用户同意,则可能发生这种情况。您可能向错误的租户发送了身份验证请求。
    当我删除同意范围行时,我获得了身份验证,但我没有获得访问Id,而是获得了一个不适用于Graph API的令牌Id,以下是更多信息: