身份验证失败:com.microsoft.identity.client.exception.MsalClientException:缺少类型所需的令牌:{0}

Nar*_*vva 2 android access-token azure-active-directory azure-ad-b2c azure-ad-msal

实现了 Azure B2C 登录。

突然应用程序收到此错误。无法找到问题出在哪里。谁能帮忙

我们使用以下源: https ://github.com/Azure-Samples/ms-identity-android-java

在此输入图像描述

在此输入图像描述

下面的代码用于生成 KeyHash

public static void getKeyHash(Context mAppContext){
        final String packageName = mAppContext.getPackageName();
        try {
            final PackageInfo info = mAppContext.getPackageManager().getPackageInfo(packageName, PackageManager.GET_SIGNATURES);
            for (final Signature signature : info.signatures) {
                final MessageDigest messageDigest = MessageDigest.getInstance("SHA");
                messageDigest.update(signature.toByteArray());
                final String signatureHash = Base64.encodeToString(messageDigest.digest(), Base64.NO_WRAP);
                Log.i("Utils", "signatureHash-->"+signatureHash);
            }
        } catch (PackageManager.NameNotFoundException | NoSuchAlgorithmException e) {
            e.printStackTrace();
            Log.e("Utils", "Unexpected error in verifyRedirectUriWithAppSignature()", e);
        }

    }
Run Code Online (Sandbox Code Playgroud)

已授予权限的范围和在 android 代码中使用的相同范围 URL

在此输入图像描述

添加此权限应用程序后我忘记了offline_access权限

All*_* Wu 7

我重现了您的问题并成功解决。

这是因为您没有在Azure门户上获得API权限的管理员同意。

请参阅官方示例代码中的这一行。

public static List<String> getScopes() {
        return Arrays.asList(
                "https://fabrikamb2c.onmicrosoft.com/helloapi/demo.read");
    }
Run Code Online (Sandbox Code Playgroud)

此示例将范围设置为,https://fabrikamb2c.onmicrosoft.com/helloapi/demo.read以便它可以获取此 API 的访问令牌。

首先,您应该添加代表您的 Web API 的应用程序注册,并按照快速入门:配置应用程序以公开 Web API 公开该 API

其次,您需要auth_config_b2c.json按照快速入门:配置客户端应用程序以访问 Web API 来在客户端应用程序注册中添加 API 权限(其客户端 ID 在文件中配置) 。

现在最重要的事情是在 Azure 门户中获得管理员同意:

在此输入图像描述

您可以在Azure门户中单击权限来查看它。

在此输入图像描述

将代码中的范围修改为您自己的范围/权限。

public static List<String> getScopes() {
        return Arrays.asList(
                "https://allentest001.onmicrosoft.com/api/demo.read");
    }
Run Code Online (Sandbox Code Playgroud)

配置完所有设置后,我们可以在登录后获取访问令牌。

在此输入图像描述