【问题标题】:Authentication failed: com.microsoft.identity.client.exception.MsalClientException: Missing required tokens of type: {0}身份验证失败:com.microsoft.identity.client.exception.MsalClientException:缺少所需的类型令牌:{0}
【发布时间】:2021-07-25 04:07:01
【问题描述】:

实现了 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);
        }

    }

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

我忘记了 offline_access 权限 添加此权限应用后工作

【问题讨论】:

    标签: android azure-active-directory azure-ad-b2c access-token msal


    【解决方案1】:

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

    这是因为你没有在 Azure 门户上对 API 权限进行管理员同意。

    请看官方示例代码中的this line

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

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

    首先,您应该添加一个代表您的 Web API 的应用注册,并按照 Quickstart: Configure an application to expose a web API 公开该 API。

    其次,您需要按照Quickstart: Configure a client application to access a web API在您的客户端应用注册中添加API权限(其客户端ID在auth_config_b2c.json文件中配置)。

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

    您可以在 Azure 门户中点击权限查看。

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

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

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

    【讨论】:

    • 您好,非常感谢您的回答。范围许可是适当的。我的问题中更新了屏幕截图。你能检查一下吗?
    • 我正在使用以下命令生成 keyhash keytool -exportcert -alias androiddebugkey -keystore "D:\Samples\TaazaDelivery\taaza_android\gradle\taazakeystore.jks" | "C:\Users\nravva\Downloads\openssl-0.9.8k_X64\bin\openssl.exe" sha1 -binary | "C:\Users\nravva\Downloads\openssl-0.9.8k_X64\bin\openssl.exe" base64 xSLzBBuLJunOQPB89rtzM54FXx4= 是否正确??
    猜你喜欢
    • 2019-12-03
    • 1970-01-01
    • 2018-08-03
    • 1970-01-01
    • 2018-07-23
    • 2020-08-27
    • 2017-02-24
    • 2020-04-19
    • 2020-01-27
    相关资源
    最近更新 更多