【发布时间】:2016-08-24 01:10:26
【问题描述】:
我已经保护了我的 API 应用程序,并且我已经使用我在此处找到的示例应用程序成功测试了我的 ADB2C 流程:https://github.com/Azure-Samples/active-directory-b2c-xamarin-native。使用该结构,我可以触发登录过程,然后访问受保护的 API 调用。
不过,为了方便起见,我还想使用 WindowsAzure.Mobile sdk。此处暗示:https://cgillum.tech/2016/08/10/app-service-auth-and-azure-ad-b2c-part-2/ 您可以在该类中从 LoginAsync 触发 B2C 流,但是当我以这种方式调用它时它什么也不做。
我还找到了https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-dotnet-how-to-use-client-library/(滚动到“使用 Active Directory 身份验证库对用户进行身份验证”),我用 MSAL 调用代替了获取令牌。这会触发登录流程,我得到一个好的令牌并要求返回,然后我将它放入一些 JSON 中并像这样传递它:
AuthenticationResult ar = await App.PCApplication.AcquireTokenSilentAsync(App.Scopes, "", App.Authority, App.SignUpSignInpolicy, false);
JObject payload = new JObject();
payload["access_token"] = ar.AccessToken;
user = await App.MobileService.LoginAsync(
MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory, payload);
对 LoginAsync 的调用会抛出
{Microsoft.WindowsAzure.MobileServices.MobileServiceInvalidOperationException: You do not have permission to view this directory or page.
at Microsoft.WindowsAzure.MobileServices.MobileServiceHttpClient+<ThrowInvalidResponse>d__18.MoveNext () [0x0022f] in <filename unknown>:0
--- End of stack trace from previous location where exception was thrown ---
(snip)
它们不是为了协同工作而设计的吗?这些是不同种类的令牌吗?我使用 B2C 的原因是因为我真的不想知道所有 OAUTH 的东西 :)
【问题讨论】:
-
你能分享那个不起作用的 LoginAsync 调用吗?当你说它什么都不做时,webview 是否出现了?
-
所以调用的 MSAL 版本会弹出 webview 并且该部分工作正常。对 LoginAsync 的调用与上面的示例代码相同。但是对 LoginAsync 的调用从未显示它只是静默返回或崩溃的任何内容。
JObject payload = new JObject(); payload["authenticationToken"] = ar.IdToken; var user = await mc.LoginAsync(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory, payload);
标签: xamarin azure-web-app-service azure-mobile-services azure-api-apps azure-ad-b2c