Android Microsoft dynamics CRM adal4j 登录问题
Android Microsoft dynamics CRM adal4j Login Issue
我正在使用 Microsoft aad:adal4j 来处理来自移动设备的动态 crm 登录。实施后我得到以下异常。
我做错了什么?
错误
java.lang.NoSuchMethodError: No static method encodeBase64URLSafeString([B)Ljava/lang/String; in class Lorg/apache/commons/codec/binary/Base64; or its super classes (declaration of 'org.apache.commons.codec.binary.Base64' appears in /system/framework/org.apache.http.legacy.boot.jar)
java.util.concurrent.ExecutionException: java.lang.NoSuchMethodError: No static method encodeBase64URLSafeString([B)Ljava/lang/String; in class Lorg/apache/commons/codec/binary/Base64; or its super classes (declaration of 'org.apache.commons.codec.binary.Base64' appears in /system/framework/org.apache.http.legacy.boot.jar)
at java.util.concurrent.FutureTask.report(FutureTask.java:94)
at java.util.concurrent.FutureTask.get(FutureTask.java:164)
at com.sampleadal.MainActivity.onCreate(MainActivity.java:33)
at android.app.Activity.performCreate(Activity.java:6237)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.NoSuchMethodError: No static method encodeBase64URLSafeString([B)Ljava/lang/String; in class Lorg/apache/commons/codec/binary/Base64; or its super classes (declaration of 'org.apache.commons.codec.binary.Base64' appears in /system/framework/org.apache.http.legacy.boot.jar)
at com.microsoft.aad.adal4j.AuthenticationContext.computeSha256Hash(AuthenticationContext.java:798)
at com.microsoft.aad.adal4j.AuthenticationContext.logResult(AuthenticationContext.java:775)
at com.microsoft.aad.adal4j.AuthenticationContext.access0(AuthenticationContext.java:61)
at com.microsoft.aad.adal4j.AuthenticationContext.call(AuthenticationContext.java:130)
at com.microsoft.aad.adal4j.AuthenticationContext.call(AuthenticationContext.java:117)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
代码
AuthenticationResult result = (AuthenticationResult) new AuthenticationContext(Constants.AUTHORITY_URL, false, Executors.newFixedThreadPool(1)).acquireToken(Constants.SERVICE_URL, Constants.CLIENT_ID, "my_login_id", "my_password", null).get();
Log.d("TAG", "Access Token - " + result.getAccessToken() + " \n Refresh Token - " + result.getRefreshToken() + " \n ID Token - " + result.getAccessToken() + " \n User ID - " + result.getUserInfo().getUniqueId() + " \n Displayable ID - " + result.getUserInfo().getDispayableId());
Gradle 文件
compile 'com.microsoft.aad:adal4j:0.0.2'
也试过这个:
代码:
AuthenticationResult result = (AuthenticationResult) new AuthenticationContext(Constants.AUTHORITY_URL, false, Executors.newFixedThreadPool(1)).acquireToken(Constants.SERVICE_URL, new ClientCredential("my_login_id", "my_password"), null).get();
输出
{
"error": "unauthorized_client",
"error_description": "AADSTS70001: Application with identifier 'prasanth' was not found in the directory windows.net\r\nTrace ID: 8c5ccd53-af99-4ff0-8556-501a53080d2f\r\nCorrelation ID: 8651e7f1-a7db-4673-aafb-52fef0d48d2d\r\nTimestamp: 2016-09-26 06:10:41Z"
}
@abhishesh 已经指出了正确的解决方案。
java 的 adald4j 库不是为 android 设计的,它使用与 android 内部不同版本的 apache 公共库。
我 运行 使用 figo connect API (www.figo.io) 遇到了同样的问题。
您需要做的事情:
下载 adald4j 库 https://github.com/AzureAD/azure-activedirectory-library-for-java
并在本地将其添加到您的项目中。
下载 apache 公共库并重命名它的所有包名称(如 "org.apache.commons.codec.android")。例如,在 sublime text 中跨多个文件使用搜索和替换。
在本地添加 apache 公共库。
将您下载的 adald4j 库中常见的所有 apache 包实现重命名为您指定的新名称。这确保该库使用您的 apache 公共版本而不是 android 内部版本。
com.microsoft.aad/adal 是 Android 个应用程序的 Azure Active Directory 库,而 com.microsoft.azure/adal4j 是 [=20= 个应用程序的 Azure Active Directory 库] 网络应用程序。
http://mvnrepository.com/artifact/com.microsoft.aad/adal/1.0.0 http://mvnrepository.com/artifact/com.microsoft.azure/adal4j
我正在使用 Microsoft aad:adal4j 来处理来自移动设备的动态 crm 登录。实施后我得到以下异常。
我做错了什么?
错误
java.lang.NoSuchMethodError: No static method encodeBase64URLSafeString([B)Ljava/lang/String; in class Lorg/apache/commons/codec/binary/Base64; or its super classes (declaration of 'org.apache.commons.codec.binary.Base64' appears in /system/framework/org.apache.http.legacy.boot.jar)
java.util.concurrent.ExecutionException: java.lang.NoSuchMethodError: No static method encodeBase64URLSafeString([B)Ljava/lang/String; in class Lorg/apache/commons/codec/binary/Base64; or its super classes (declaration of 'org.apache.commons.codec.binary.Base64' appears in /system/framework/org.apache.http.legacy.boot.jar)
at java.util.concurrent.FutureTask.report(FutureTask.java:94)
at java.util.concurrent.FutureTask.get(FutureTask.java:164)
at com.sampleadal.MainActivity.onCreate(MainActivity.java:33)
at android.app.Activity.performCreate(Activity.java:6237)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.NoSuchMethodError: No static method encodeBase64URLSafeString([B)Ljava/lang/String; in class Lorg/apache/commons/codec/binary/Base64; or its super classes (declaration of 'org.apache.commons.codec.binary.Base64' appears in /system/framework/org.apache.http.legacy.boot.jar)
at com.microsoft.aad.adal4j.AuthenticationContext.computeSha256Hash(AuthenticationContext.java:798)
at com.microsoft.aad.adal4j.AuthenticationContext.logResult(AuthenticationContext.java:775)
at com.microsoft.aad.adal4j.AuthenticationContext.access0(AuthenticationContext.java:61)
at com.microsoft.aad.adal4j.AuthenticationContext.call(AuthenticationContext.java:130)
at com.microsoft.aad.adal4j.AuthenticationContext.call(AuthenticationContext.java:117)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
代码
AuthenticationResult result = (AuthenticationResult) new AuthenticationContext(Constants.AUTHORITY_URL, false, Executors.newFixedThreadPool(1)).acquireToken(Constants.SERVICE_URL, Constants.CLIENT_ID, "my_login_id", "my_password", null).get();
Log.d("TAG", "Access Token - " + result.getAccessToken() + " \n Refresh Token - " + result.getRefreshToken() + " \n ID Token - " + result.getAccessToken() + " \n User ID - " + result.getUserInfo().getUniqueId() + " \n Displayable ID - " + result.getUserInfo().getDispayableId());
Gradle 文件
compile 'com.microsoft.aad:adal4j:0.0.2'
也试过这个:
代码:
AuthenticationResult result = (AuthenticationResult) new AuthenticationContext(Constants.AUTHORITY_URL, false, Executors.newFixedThreadPool(1)).acquireToken(Constants.SERVICE_URL, new ClientCredential("my_login_id", "my_password"), null).get();
输出
{
"error": "unauthorized_client",
"error_description": "AADSTS70001: Application with identifier 'prasanth' was not found in the directory windows.net\r\nTrace ID: 8c5ccd53-af99-4ff0-8556-501a53080d2f\r\nCorrelation ID: 8651e7f1-a7db-4673-aafb-52fef0d48d2d\r\nTimestamp: 2016-09-26 06:10:41Z"
}
@abhishesh 已经指出了正确的解决方案。 java 的 adald4j 库不是为 android 设计的,它使用与 android 内部不同版本的 apache 公共库。 我 运行 使用 figo connect API (www.figo.io) 遇到了同样的问题。
您需要做的事情:
下载 adald4j 库 https://github.com/AzureAD/azure-activedirectory-library-for-java 并在本地将其添加到您的项目中。
下载 apache 公共库并重命名它的所有包名称(如 "org.apache.commons.codec.android")。例如,在 sublime text 中跨多个文件使用搜索和替换。 在本地添加 apache 公共库。
将您下载的 adald4j 库中常见的所有 apache 包实现重命名为您指定的新名称。这确保该库使用您的 apache 公共版本而不是 android 内部版本。
com.microsoft.aad/adal 是 Android 个应用程序的 Azure Active Directory 库,而 com.microsoft.azure/adal4j 是 [=20= 个应用程序的 Azure Active Directory 库] 网络应用程序。
http://mvnrepository.com/artifact/com.microsoft.aad/adal/1.0.0 http://mvnrepository.com/artifact/com.microsoft.azure/adal4j