Azure 移动应用程序 - Node.js 后端 - Android 客户端自定义身份验证
Azure Mobile Apps - Node.js backend - Android Client Custom Authentication
我目前正在尝试在使用 Azure 移动应用作为 back-end 构建的 Android 应用程序中实施自定义身份验证。我关注了许多不同的信息,感觉我在兜圈子,在这个阶段可能遗漏了一些简单的东西。我会尽可能详细地列出我所做的一切。
我想达到什么目的?
使用存储在数据库 table 中的登录凭据进行身份验证。
到目前为止我得到了什么?
到目前为止,我有一个自定义 api 验证 user/password 凭据,然后使用 'azure-mobile-apps/src/auth'[=16 返回 JWT 令牌=]
Result from my login API
To get this api working I used this Github repo as a reference
我知道此令牌有效,因为当我尝试访问我的一个仅标记为经过身份验证的访问的 api 时,我收到以下消息:您必须登录才能使用此application 但是当我将令牌作为 header 附加到 "x-zumo-auth" 时,我可以毫无问题地访问 api。
我卡在哪里了?
我卡在了 Android 客户端中收到令牌并尝试使用它对 MobileServiceClient 进行身份验证的位置。我尝试了几种不同的方法,但似乎无法找出正确的方法,我目前拥有的是:
User user = new Gson().fromJson(result.getAsJsonObject().get("user"), User.class);
Log.d(TAG, "User: " + user.toString());
Log.d(TAG, result.getAsJsonObject().get("token").toString());
MobileServiceUser mobileServiceUser = new
MobileServiceUser(user.getUsername());
mobileServiceUser.setAuthenticationToken(
result.getAsJsonObject().get("token").toString());
mClient.setCurrentUser(mobileServiceUser);
用户只是一个基本的 object,它包含登录 api 返回的其他信息。
执行上述代码后,当我尝试访问需要身份验证的自定义 api 之一时,我得到以下堆栈跟踪。 {} 中没有消息,所以我真的不知道从这里去哪里。也许有人以前做过这个并且知道我错过了什么?
java.util.concurrent.ExecutionException: com.microsoft.windowsazure.mobileservices.MobileServiceException: {}
09-29 09:12:43.151 17172-17370/{package} W/System.err: at com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:500)
09-29 09:12:43.151 17172-17370/{package} W/System.err: at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:479)
09-29 09:12:43.151 17172-17370/{package} W/System.err: at com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:76)
09-29 09:12:43.151 17172-17370/{package} W/System.err: at ie.iskill.iskillmanagementmobile.azure.AzureServiceAdapter.run(AzureServiceAdapter.java:153)
09-29 09:12:43.151 17172-17370/{package} W/System.err: at java.lang.Thread.run(Thread.java:818)
09-29 09:12:43.151 17172-17370/{package} W/System.err: Caused by: com.microsoft.windowsazure.mobileservices.MobileServiceException: {}
09-29 09:12:43.151 17172-17370/{package} W/System.err: at com.microsoft.windowsazure.mobileservices.http.MobileServiceConnection.onNext(MobileServiceConnection.java:128)
09-29 09:12:43.151 17172-17370/{package} W/System.err: at com.microsoft.windowsazure.mobileservices.MobileServiceClient.handleRequest(MobileServiceClient.java:1610)
09-29 09:12:43.151 17172-17370/{package} W/System.err: at com.microsoft.windowsazure.mobileservices.http.MobileServiceConnection.start(MobileServiceConnection.java:113)
09-29 09:12:43.151 17172-17370/{package} W/System.err: at com.microsoft.windowsazure.mobileservices.http.RequestAsyncTask.doInBackground(RequestAsyncTask.java:78)
09-29 09:12:43.151 17172-17370/{package} W/System.err: at com.microsoft.windowsazure.mobileservices.http.RequestAsyncTask.doInBackground(RequestAsyncTask.java:35)
09-29 09:12:43.151 17172-17370/{package} W/System.err: at android.os.AsyncTask.call(AsyncTask.java:292)
09-29 09:12:43.151 17172-17370/{package} W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
09-29 09:12:43.151 17172-17370/{package} W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
09-29 09:12:43.151 17172-17370/{package} W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
09-29 09:12:43.151 17172-17370/{package} W/System.err: ... 1 more
我尝试了什么?
事物的变化如此之多,在这里一一列出是不可行的,我以前从未在这里发帖,因为我通常更喜欢用我的头脑来解决问题,但这次我真的难倒。
我浏览了几个不同的问题,找到了一个 'zumo book',其中包含由 AdrianHall 撰写的关于自定义身份验证的章节(我的声誉不能 link 超过两个 link。)在几个问题中提到但无法在其中找到我的问题的答案。
如果我遗漏了任何有用的信息,请在回复中告诉我,以便我尽快添加。
Android 使用的SDK: 编译'com.microsoft.azure:azure-mobile-android:3.3.0@aar'
让我以以下开头作为这个答案的序言:我很傻!
在 back-end 上一切都按预期工作,因此令牌在 x-zumo-auth header.
的 Postman 上工作的原因
然而,我使用了以下代码来提取我的令牌:
result.getAsJsonObject().get("token").toString()
当我应该有如下:
result.getAsJsonObject().get("token").getAsString()
原因是 .toString() 方法在我的令牌上留下了引号,所以不是 eySKANDadnzl65...它读作 "eySDKANDadnzl65..." 带引号。
这导致客户端 return no-message 异常。我只是通过多次阅读日志并发现每次输出令牌时都附加了 "'s 才注意到它。
我会把这个留在这里只是 in-case 其他人碰巧像我一样犯了这个错误。
我目前正在尝试在使用 Azure 移动应用作为 back-end 构建的 Android 应用程序中实施自定义身份验证。我关注了许多不同的信息,感觉我在兜圈子,在这个阶段可能遗漏了一些简单的东西。我会尽可能详细地列出我所做的一切。
我想达到什么目的?
使用存储在数据库 table 中的登录凭据进行身份验证。
到目前为止我得到了什么?
到目前为止,我有一个自定义 api 验证 user/password 凭据,然后使用 'azure-mobile-apps/src/auth'[=16 返回 JWT 令牌=]
Result from my login API
To get this api working I used this Github repo as a reference
我知道此令牌有效,因为当我尝试访问我的一个仅标记为经过身份验证的访问的 api 时,我收到以下消息:您必须登录才能使用此application 但是当我将令牌作为 header 附加到 "x-zumo-auth" 时,我可以毫无问题地访问 api。
我卡在哪里了?
我卡在了 Android 客户端中收到令牌并尝试使用它对 MobileServiceClient 进行身份验证的位置。我尝试了几种不同的方法,但似乎无法找出正确的方法,我目前拥有的是:
User user = new Gson().fromJson(result.getAsJsonObject().get("user"), User.class);
Log.d(TAG, "User: " + user.toString());
Log.d(TAG, result.getAsJsonObject().get("token").toString());
MobileServiceUser mobileServiceUser = new
MobileServiceUser(user.getUsername());
mobileServiceUser.setAuthenticationToken(
result.getAsJsonObject().get("token").toString());
mClient.setCurrentUser(mobileServiceUser);
用户只是一个基本的 object,它包含登录 api 返回的其他信息。
执行上述代码后,当我尝试访问需要身份验证的自定义 api 之一时,我得到以下堆栈跟踪。 {} 中没有消息,所以我真的不知道从这里去哪里。也许有人以前做过这个并且知道我错过了什么?
java.util.concurrent.ExecutionException: com.microsoft.windowsazure.mobileservices.MobileServiceException: {} 09-29 09:12:43.151 17172-17370/{package} W/System.err: at com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:500) 09-29 09:12:43.151 17172-17370/{package} W/System.err: at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:479) 09-29 09:12:43.151 17172-17370/{package} W/System.err: at com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:76) 09-29 09:12:43.151 17172-17370/{package} W/System.err: at ie.iskill.iskillmanagementmobile.azure.AzureServiceAdapter.run(AzureServiceAdapter.java:153) 09-29 09:12:43.151 17172-17370/{package} W/System.err: at java.lang.Thread.run(Thread.java:818) 09-29 09:12:43.151 17172-17370/{package} W/System.err: Caused by: com.microsoft.windowsazure.mobileservices.MobileServiceException: {} 09-29 09:12:43.151 17172-17370/{package} W/System.err: at com.microsoft.windowsazure.mobileservices.http.MobileServiceConnection.onNext(MobileServiceConnection.java:128) 09-29 09:12:43.151 17172-17370/{package} W/System.err: at com.microsoft.windowsazure.mobileservices.MobileServiceClient.handleRequest(MobileServiceClient.java:1610) 09-29 09:12:43.151 17172-17370/{package} W/System.err: at com.microsoft.windowsazure.mobileservices.http.MobileServiceConnection.start(MobileServiceConnection.java:113) 09-29 09:12:43.151 17172-17370/{package} W/System.err: at com.microsoft.windowsazure.mobileservices.http.RequestAsyncTask.doInBackground(RequestAsyncTask.java:78) 09-29 09:12:43.151 17172-17370/{package} W/System.err: at com.microsoft.windowsazure.mobileservices.http.RequestAsyncTask.doInBackground(RequestAsyncTask.java:35) 09-29 09:12:43.151 17172-17370/{package} W/System.err: at android.os.AsyncTask.call(AsyncTask.java:292) 09-29 09:12:43.151 17172-17370/{package} W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237) 09-29 09:12:43.151 17172-17370/{package} W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 09-29 09:12:43.151 17172-17370/{package} W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 09-29 09:12:43.151 17172-17370/{package} W/System.err: ... 1 more
我尝试了什么?
事物的变化如此之多,在这里一一列出是不可行的,我以前从未在这里发帖,因为我通常更喜欢用我的头脑来解决问题,但这次我真的难倒。 我浏览了几个不同的问题,找到了一个 'zumo book',其中包含由 AdrianHall 撰写的关于自定义身份验证的章节(我的声誉不能 link 超过两个 link。)在几个问题中提到但无法在其中找到我的问题的答案。
如果我遗漏了任何有用的信息,请在回复中告诉我,以便我尽快添加。
Android 使用的SDK: 编译'com.microsoft.azure:azure-mobile-android:3.3.0@aar'
让我以以下开头作为这个答案的序言:我很傻!
在 back-end 上一切都按预期工作,因此令牌在 x-zumo-auth header.
的 Postman 上工作的原因然而,我使用了以下代码来提取我的令牌:
result.getAsJsonObject().get("token").toString()
当我应该有如下:
result.getAsJsonObject().get("token").getAsString()
原因是 .toString() 方法在我的令牌上留下了引号,所以不是 eySKANDadnzl65...它读作 "eySDKANDadnzl65..." 带引号。
这导致客户端 return no-message 异常。我只是通过多次阅读日志并发现每次输出令牌时都附加了 "'s 才注意到它。
我会把这个留在这里只是 in-case 其他人碰巧像我一样犯了这个错误。