Microsoft身份验证库(MSAL)loginPopup:错误“提供的请求必须包含'client_secret'输入参数。

时间:2020-09-03 17:15:21

标签: azure microsoft-teams msal

我正在尝试使用MSAL为我的单页应用程序添加SSO,目的是为了获取Oauth2令牌以用于解决Microsoft SaaS订阅。我已基于以下示例存储库配置了我的代码:https://github.com/Azure-Samples/ms-identity-javascript-v2。它使用的是MSAL 2.0,而不是1.X版本。

这是相关的代码段,在/signup页上运行:

var config = {
      auth: {
        clientId: <MY_CLIENT_ID>,
        authority: "https://login.microsoftonline.com/common",
        redirectUri: <APP_URL> + "/signup",
      },
      cache: {
        cacheLocation: "sessionStorage",
        storeAuthStateInCookie: false,
      }
    };
var msalInstance = new msal.PublicClientApplication(config);
msalInstance.loginPopup(["openid", "profile", "User.Read"]).then((response) => {
      console.log(response)
    }).catch(error => {
      console.error(error);
    });

在应用程序中调用此代码,我成功使用弹出窗口登录,但出现以下错误:ServerError: invalid_client: 70002 - [2020-09-03 16:55:35Z]: AADSTS70002: The provided request must include a 'client_secret' input parameter.

我可以看到具有以下表单数据的基础网络呼叫是https://login.microsoftonline.com/common/oauth2/v2.0/token

client_id: <MY_CLIENT_ID>
redirect_uri: <APP_URL>/signup
scope: openid profile
code: <some value>
code_verifier: <some value>
grant_type: authorization_code
client_info: 1
client-request-id: <some value>

根据此处https://docs.microsoft.com/en-us/advertising/guides/authentication-oauth-identity-platform?view=bingads-13#request-accesstoken的文档,此调用应具有可配置的client_secret参数,这会导致我相信的错误。

我在Azure门户上的应用程序中具有必需的客户端密码。我的问题是,如何在config对象中配置客户端密码?我无法在线找到任何示例,也尝试盲目在配置中的clientSecret下添加auth作为键,但这没有将其传递给login.microsoftonline.com调用。 / p>

更新

进一步研究之后,我意识到设置的根本问题是我试图使用authorization grant flow来请求令牌,但需要使用client credentials flow。将令牌获取移至后端(并在此处使用客户端机密)后,在this followup thread中获得了更多帮助,我能够按预期运行SSO和令牌获取。

3 个答案:

答案 0 :(得分:0)

我们已经调试了您的示例,并且可以正常使用。经过测试,我们认为该问题正在发生,这是因为您的代码无法在'/authPopup.js'中调用Signin()方法。如果在index.html中发生此方法调用,您将不会遇到任何问题。

答案 1 :(得分:0)

考虑直接使用Teams中的新SSO功能,而不是直接使用MSAL,它可以为您带来很多好处,并且更易于使用。这是overview,这是working sample

关于示例,它在节点中,并且我正在研究该示例的dotnet版本。看来您使用的是节点,所以您应该参考原始文档,但是我认为我发现了一些错误,因此,如果遇到任何问题,您可以查看我版本中的客户端脚本-请参阅here

答案 2 :(得分:0)

这将解决您的问题,而不是创建 Web 创建单页应用程序。看下面的例子

enter image description here