Microsoft Azure B2C-获取配置文件信息

时间:2020-10-26 21:18:02

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

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

我使用REST API,其他一些设置以及一个b2c AD设置了一个Azure帐户。经过数小时的痛苦生活,我终于(一定程度上)努力使用此AD进行登录,并被要求访问REST API。

我现在遇到的问题是,我尝试了所有仅能找到有关登录用户的个人资料的任何变化,而我却一无所获。

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

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

这些都不是最直观的。我已经阅读了文档,但是每次我用Google搜索时,都会以不同的信息进入Microsoft文档的不同页面。

我不知道我需要传递给作用域...我不知道如何通过属性获得auth令牌,因为每次尝试使用图形时,都会收到有关空或无效auth令牌的错误(即使是登录后)。

即使我成功登录了google,上面的结果也为我提供了一个空访问令牌,空租户ID,空作用域,帐户下的空用户名...唯一正确的是唯一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

1 个答案:

答案 0 :(得分:0)

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

考虑以下代码以从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集成的完整和分步示例,您可以访问以下链接: