【问题标题】:Microsoft Azure B2C - Get Profile InformationMicrosoft Azure B2C - 获取配置文件信息
【发布时间】:2020-10-26 21:18:02
【问题描述】:

我即将完全放弃这个工作流程。

我使用 REST API、其他一些东西以及 b2c AD 设置了一个 Azure 帐户。经过数小时和数小时的厌恶生活后,我终于(在某种程度上)可以使用此广告登录,并被要求访问 REST API。

我现在遇到的问题是,我已经尝试了所有我能找到的关于如何获取登录者的个人资料信息的所有变体,但我一无所获。

即使登录后的示例文件也无法正常工作 - 它旨在将您重定向到显示欢迎(用户名)但用户名未在我的结果中返回的页面

 result = await App.AuthenticationClient
                    .AcquireTokenInteractive(B2CConstants.Scopes)
                    .WithPrompt(Microsoft.Identity.Client.Prompt.SelectAccount)
                    .WithParentActivityOrWindow(App.UIParent)
                    .ExecuteAsync();

这些都不是最直观的。我读过文档,但不知何故,每次我用谷歌搜索它时,我都会在不同的 Microsoft 文档页面上找到不同的信息。

我不知道我需要传递给作用域...登录后)。

即使我成功使用 google 登录,上面的结果也给了我一个 NULL 访问令牌、null 租户 id、null 范围、null 帐户下的用户名...唯一正确的是唯一 ID 与我在 AD 用户页面上看到的 ID。

编辑:AccessToken 实际上不为空,我在那里获取信息...但是我尝试进行的每个我认为应该使用它的调用都失败了。

即,如果我在登录后尝试调用它来获取我的信息:

InteractiveAuthenticationProvider authProvider = new InteractiveAuthenticationProvider(App.AuthenticationClient, B2CConstants.Scopes);
                GraphServiceClient graphClient = new GraphServiceClient(authProvider);
                var users = await graphClient.Me.Request().GetAsync();

请注意,App.AuthenticationClient 是我在上面登录时使用的 - 我也尝试过

            //.Create(B2CConstants.ClientId)
            //.Build();

我明白了(只有部分错误,所以我没有传递 ID)

Microsoft.Graph.ServiceException: 'Code: InvalidAuthenticationToken
Message: Access token validation failure.
Inner error:
    AdditionalData:
    date: 2020-10-26T21:45:25

【问题讨论】:

标签: c# azure xamarin.forms azure-ad-b2c microsoft-graph-sdks


【解决方案1】:

我建议您主要参考 Microsoft Docs 以获取任何信息。

考虑以下代码以从 B2C 获取用户详细信息(这是 Android Xamarin 表单页面 .cs 代码)

async void OnSignInSignOut(object sender, EventArgs e)
        {
            AuthenticationResult authResult = null;
            IEnumerable<IAccount> accounts = await App.PCA.GetAccountsAsync();
            try
            {
                if (btnSignInSignOut.Text == "Sign in")
                {
                    try
                    {
                        IAccount firstAccount = accounts.FirstOrDefault();
                        authResult = await App.PCA.AcquireTokenSilent(App.Scopes, firstAccount)
                                              .ExecuteAsync();
                    }
                    catch (MsalUiRequiredException ex)
                    {
                        try
                        {
                            authResult = await App.PCA.AcquireTokenInteractive(App.Scopes)
                                                      .WithParentActivityOrWindow(App.ParentWindow)
                                                      .ExecuteAsync();
                        }
                        catch(Exception ex2)
                        {
                            await DisplayAlert("Acquire token interactive failed. See exception message for details: ", ex2.Message, "Dismiss");
                        }
                    }

                    if (authResult != null)
                    {
                        var content = await GetHttpContentWithTokenAsync(authResult.AccessToken);
                        UpdateUserContent(content);
                        Device.BeginInvokeOnMainThread(() => { btnSignInSignOut.Text = "Sign out"; });
                    }
                }
                else
                {
                    while (accounts.Any())
                    {
                        await App.PCA.RemoveAsync(accounts.FirstOrDefault());
                        accounts = await App.PCA.GetAccountsAsync();
                    }

                    slUser.IsVisible = false;
                    Device.BeginInvokeOnMainThread(() => { btnSignInSignOut.Text = "Sign in"; });
                }
            }
            catch (Exception ex)
            {
                await DisplayAlert("Authentication failed. See exception message for details: ", ex.Message, "Dismiss");
            }
        }

有关 B2C 集成的完整分步示例,您可以访问以下链接:

【讨论】:

  • 所以,和往常一样,我发帖和寻求帮助的原因是我关注了这个文档,但它没有给我用户信息。
  • 你使用的方法和这个不同。您可以克隆此解决方案并按照说明进行简单设置并进行测试吗?它应该工作。我过去使用过这个解决方案。
  • 我只展示了一次尝试 - 我尝试了很多东西。我唯一工作(somehwat)只是使用我的访问令牌对 url/.auth/me 执行 HTTP 请求 - 但是这里的问题是,当我在应用程序中创建一个新帐户,然后运行我得到的请求时没有结果 - 直到我在笔记本电脑上的浏览器中手动访问该 URL 并给出结果,然后应用程序突然开始工作
  • 您是否尝试克隆并为您设置它?
猜你喜欢
  • 2023-01-12
  • 1970-01-01
  • 2020-06-26
  • 1970-01-01
  • 2017-04-19
  • 1970-01-01
  • 1970-01-01
  • 2013-05-29
  • 2010-12-25
相关资源
最近更新 更多