从MSAL登录获取资源管理器访问令牌

时间:2019-04-18 17:14:19

标签: azure adal msal

我正在创建一个Web应用程序(javascript / HTML),使我能够代表用户管理Azure资源。我想使用MSAL登录用户并获取Azure资源管理器的访问令牌。这可能吗?当我尝试以下代码时,弹出窗口仅限于工作/学校登录(我希望所有帐户都可以访问),并且在我使用工作电子邮件时指出该组织不支持该应用_____,因此失败,因为该应用处于非托管状态状态。

这是我的工作:

我创建了一个MSAL对象。

    var myMSALObj = new Msal.UserAgentApplication(applicationConfig.clientID, applicationConfig.authority, acquireTokenRedirectCallBack,
        {storeAuthStateInCookie: true, cacheLocation: "localStorage"});

然后我打电话给loginPopup并传递management.azure.com作为范围。

myMSALObj.loginPopup("https://management.azure.com/.default")
.then(
function (idToken){
myMSALObj.acquireTokenSilent("https://management.azure.com/.default")
})

注意:我还尝试将范围设置为:https://management.azure.com/user_impersonation

我已经注册了Azure应用,清单中指定了requiredResourceAccess以包括Azure服务管理,并且“ signInAudience”设置为“ AzureADandPersonalMicrosoftAccount”。

如何将MSAL登录用于请求访问Azure资源的范围?

1 个答案:

答案 0 :(得分:0)

  

我想使用MSAL登录用户并获取访问令牌   Azure资源管理器。这可能吗?

是的,有可能。

  

如何将MSAL登录与要求访问azure的范围一起使用   资源?

范围https://management.azure.com/.default是正确的。确保授权为https://login.microsoftonline.com/common。我认为您在注册该应用程序时可能会错过一些东西。您可以参考此document进行再次检查。

更新

以下是详细步骤,供您参考。

1。单击应用程序注册(预览)->新注册 enter image description here

2。单击身份验证->检查访问令牌和ID令牌。 enter image description here

3。使用此客户端ID更新代码。

var applicationConfig = {
    clientID: '2ac327fd-4803-4ed3-****31fc8dfbbf18', //This is your client ID
    authority: "https://login.microsoftonline.com/common", 
    Scopes: ["https://management.azure.com/.default"]
};
var myMSALObj = new Msal.UserAgentApplication(applicationConfig.clientID, applicationConfig.authority, acquireTokenRedirectCallBack,
    { storeAuthStateInCookie: true, cacheLocation: "localStorage" });

function signIn() {
    myMSALObj.loginPopup(applicationConfig.graphScopes).then(function (idToken) {
        //Login Success
        showWelcomeMessage();
        acquireTokenPopupAndCallMSGraph();
    }, function (error) {
        console.log(error);
    });
}

现在,您将能够通过Azure AD和个人帐户登录工作和学校帐户。