msal-node - Client是公共的,所以nodejs中不应该出现'client_assertion'和'client_secret'

qvtsj1bj  于 2023-06-22  发布在  Node.js
关注(0)|答案(1)|浏览(158)

当我尝试从刷新令牌生成新的访问令牌时,发生此错误“令牌获取错误:服务器错误:invalid_client:700025-[2023 - 06 - 15 04:02:04Z]:AADSTS700025:客户端是公共的,因此不应显示'client_assertion'和'client_secret'。

if(createEventResponse === undefined){
                    console.log("token-expired")

                    // const accessToken = await  req.app.locals.msalClient.refreshToken(refreshToken);
                    // console.log(accessToken)
                    const scopes = ["https://graph.microsoft.com/user.read"];

                    const pca = new ConfidentialClientApplication(msalConfig);

                    pca.acquireTokenByRefreshToken({
                      refreshToken: refreshToken,
                      scopes: scopes,

                    })
                      .then((response:any) => {
                        // New access token acquisition successful
                        console.log(response)
                        const newAccessToken = response.accessToken;
                        console.log('New Access token:', newAccessToken);

                        // Use the new access token for further operations
                        // ...
                      })
                      .catch((error) => {
                        // Token acquisition failed
                        console.error('Token acquisition error:', error);
                      });

 /*                    const accessToken = await msalClient.acquireTokenSilent(scopes, refreshToken);
                    console.log("new access token");
                    console.log(accessToken);

                    const retryCreateEventResponse = await createOutlookEventService(accessToken, formData, "Pacific Standard Time");
                    console.log(retryCreateEventResponse) */
                }
o75abkj4

o75abkj41#

我创建了一个Azure AD应用程序并授予API权限,如下所示:

现在我尝试通过Postman生成访问令牌,参数如下:

https://login.microsoftonline.com/TenantID/oauth2/v2.0/token

client_id:ClientID
client_secret:ClientSecret
scope:https://graph.microsoft.com/user.read offline_access
grant_type:authorization_code
redirect_uri:https://jwt.ms
code:code

我得到了相同的错误如下所示:

错误"*AADSTS700025:客户端是公共的,因此不应显示“client_assertion”和“client_secret”*”,如果Azure AD应用程序配置为公共客户端,并且您在生成令牌时尝试传递Client Secret,则通常会发生此情况。
检查
应用程序是否为公共客户端
,如下所示:

    • 要解决错误,**请检查以下内容:
  • 如果您希望应用程序作为Public Client,请在代码中生成令牌时不要传递Client Secret。
    *如果不是,则将应用程序配置为Web/SPA并将Enable the following mobile and desktop flows设置为否,然后传递Client Secret以生成令牌。

在不传递Azure AD公共客户端应用程序的客户端密码的情况下,我能够成功生成访问和刷新令牌,如下所示:

相关问题