- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
使用 AuthenticationContext.AcquireTokenAsync()
和 MobileServiceClient.LoginAsync()
对用户进行身份验证有什么区别?
我可以使用第一种方法中的 token 来对第二种方法中的用户进行身份验证吗?
我一直在尝试使用 Xamarin 通过 移动设备 (iOS) 对 Azure 中的移动服务进行用户身份验证 native (不是表单)。
网上有足够的教程可以帮助您入门,但在这个过程中,我迷失了方向并感到困惑......
目前有效的方法如下;它让用户在另一个页面中输入他的凭据并返回一个 JWT token ,该 token (如果解码 here1 )具有列出的声明 here2 .
此外,此 token 在 Controller 中通过带有 Authorization
header 和 Bearer token
的请求中的 [Authorize]
属性进行授权。
注意:以下常量取自 Active Directory 中注册的应用程序( native 和Web 应用程序/API)。
public const string Authority = @"https://login.windows.net/******.com";
public const string GraphResource = @"https://*******.azurewebsites.net/********";
public const string ClientId = "046b****-****-****-****-********0290";
public const string Resource = @"https://******.azurewebsites.net/.auth/login/done";
var authContext = new AuthenticationContext(Authority);
if (authContext.TokenCache.ReadItems().Any(c => c.Authority == Authority))
{
authContext = new AuthenticationContext(authContext.TokenCache.ReadItems().First().Authority);
}
var uri = new Uri(Resource);
var platformParams = new PlatformParameters(UIApplication.SharedApplication.KeyWindow.RootViewController);
AuthenticationResult authResult = await authContext.AcquireTokenAsync(GraphResource, ClientId, uri, platformParams);
我尝试过的另一个工作身份验证流程如下;其作用相同,不同之处在于它通知用户该应用需要访问某些资源的权限。
如果允许,将返回一个 JWT token (字符数比前一个 token 少),并包含较少的有效负载数据。不过,此 token 不会像前一个 token 一样传递授权属性。
public const string AadResource = @"https://******.azurewebsites.net/.auth/aad";
var client = new MobileServiceClient(AadResource);
var rootView = UIApplication.SharedApplication.KeyWindow.RootViewController;
MobileServiceUser user = await client.LoginAsync(rootView, "aad");
显然,返回类型是不同的,但是,这两种身份验证方法的主要区别是什么?
此外,另一个令人头疼的问题来自于试图实现 this3在文章的最后。我已经从上述第一个方法中获得了 token ,但是当我尝试使用 client.LoginAsync()
中的 token 跟踪客户端流程时,会返回以下错误:
The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.
为什么它们不同?
已在 this4 上得到解答同一个人(pdx mobilist/saltydogdev)在 reddit 上发帖,简单的答案是声明
。
最佳答案
是的。您可以将 token 插入 MobileServicesClient 中,然后直接使用已通过身份验证的 token 。这就是不记名 token 的美妙之处。
只需设置 MobileServiceClient CurrentUser:
MobileServiceclient Client;
...
Client.CurrentUser = new MobileServiceUser(username)
{ MobileServiceAuthenticationToken = authtoken};
编辑:
它们不同的原因是每个图书馆都请求一组不同的声明。它们仍然有效的原因是用于验证/验证 token 的基本信息就在那里。我不确定具体要求的 claim 是什么。至少是用户 ID 并且签名有效。他们正在做相同的基本事情,MobileServiceClient 只是请求更少的声明。
我相信,如果您正确设置移动服务,MobileServicesClient 可以针对 Azure AD 进行身份验证。所以您应该能够只使用 MobileServiceClient。
关于c# - Xamarin Native 中 AcquireTokenAsync 和 LoginAsync 之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44199525/
我正在尝试将一些通用代码(例如用户登录)放入类库(可移植的通用应用程序)项目中,而不是标准的空白通用应用程序项目中。 不幸的是,我无法构建类库,因为此代码片段会引发错误: No overload fo
我正在尝试使用 Azure 移动服务客户端来验证我正在使用 Xamarin.Android 构建的应用程序。我的 MainActivity 有以下代码: [Activity(Label = "AppN
我编写了一个 Android 应用程序,它使用 Azure 来执行用户通过 Google、Twitter 和 Facebook 的登录;它使用 Microsoft.WindowsAzure.Mobil
我使用的是azure mobile net客户端3.1.0.0。这是我在 Android 客户端中的旧代码: IMobileServiceClient client; //for Android
我在 azure 上有一个 mobileService,我想连接到它,使用此命令可以正常工作: MobileService.LoginAsync(MobileServiceAuthentication
目前我正在开发一个 Xamarin 应用程序,该应用程序使用 IdentityModel.OidcClient 对我的服务器进行身份验证,并且正在使用文档 (https://github.com/Id
我正在使用 Azure 移动服务登录服务,它在 Windows 8.1 上按预期工作,但在 WP 8.1 上它显示服务登录页面(Microsoft、Google 等),我输入了凭据,然后它返回到应用程
我正在关注 http://ntotten.com/2013/03/14/using-windows-azure-mobile-services-with-the-facebook-sdk-for-wi
我在游戏中使用 Parse Unity SDK 和 Facebook Unity SDK,以便用户可以使用他们的 Facebook 帐户登录。 它在移动设备(Android 和 iOS)和编辑器中运行
我正在关注 http://ntotten.com/2013/03/14/using-windows-azure-mobile-services-with-the-facebook-sdk-for-wi
TL;DR 使用 AuthenticationContext.AcquireTokenAsync() 和 MobileServiceClient.LoginAsync() 对用户进行身份验证有什么区别
我在 Xamarin.Forms 应用程序中使用 Microsoft.Azure.Mobile.Client,因为我需要在应用程序中进行离线同步。在azure中,我在应用服务中配置了简单表,并且我需要
我在 Xamarin.Forms 应用程序中实现自定义身份验证,该应用程序在 Azure 中使用 .NET 后端,一些 Controller 标有 [Authorize]。我已经按照大量博客和文章中的
编辑:可以在此处找到演示崩溃的示例项目:https://github.com/rringham/brokenazurexamforms - 您需要在以下位置设置自己的 Azure 应用服务 URL:
我当前正在尝试登录以创建领域登录名,但无法访问 SyncUser,因为我的 logInAsync 未进入 onSuccess 或 onError 方法。 onSuccess 方法返回 SyncUser
在我的 React Native 应用程序(在构建的 APK 上)调用 Expo.Google.logInAsync() 后,我收到错误代码 400“redirect_uri_mismatch”。请注
我正在制作 Windows Phone 8 应用程序,它使用 Facebook 登录来识别用户。当他们第一次登录时,他们会看到 Facebook 登录对话框,但下次用户启动应用程序登录时会在后台进行。
我是一名优秀的程序员,十分优秀!