3

我已经保护了我的 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 的东西 :)

4

1 回答 1

3

在 B2C 的情况下,您实际上是在取回一个 ID 令牌而不是访问令牌,我相信该ar.AccessToken属性将为空。在最新版本的 MSAL 中,此属性似乎也消失了。

我怀疑您只需要将有效负载更新为“authenticationToken”,然后使用ar.IdToken.

我不确定您是否可以继续使用有效负载中的“access_token”键,但可能是可以的。如果没有,请尝试“authenticationToken”。

于 2016-08-25T16:30:04.577 回答