我完全放弃了这个工作流程。
我使用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
答案 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集成的完整和分步示例,您可以访问以下链接: