身份验证失败:com.microsoft.identity.client.exception.MsalClientException:缺少类型为 {0} 的必需令牌
Authentication failed: com.microsoft.identity.client.exception.MsalClientException: Missing required tokens of type: {0}
实现了 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权限
添加此权限应用后工作
我重现了你的问题并成功解决了。
这是因为您没有对 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 的访问令牌。
首先,您应该添加代表您的网站的应用程序注册 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 门户中点击权限查看。
将代码中的scope修改为自己的scope/permission.
public static List<String> getScopes() {
return Arrays.asList(
"https://allentest001.onmicrosoft.com/api/demo.read");
}
配置好所有设置后,我们可以在登录后获取访问令牌。
实现了 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权限 添加此权限应用后工作
我重现了你的问题并成功解决了。
这是因为您没有对 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 的访问令牌。
首先,您应该添加代表您的网站的应用程序注册 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 门户中点击权限查看。
将代码中的scope修改为自己的scope/permission.
public static List<String> getScopes() {
return Arrays.asList(
"https://allentest001.onmicrosoft.com/api/demo.read");
}
配置好所有设置后,我们可以在登录后获取访问令牌。