gpt4 book ai didi

适用于 Xamarin.forms "Safari cannot open the page because the address is invalid"的 Azure AD B2C?

转载 作者:行者123 更新时间:2023-12-05 07:41:21 31 4
gpt4 key购买 nike

跟随 Xamarin 原生 sample ,示例本身似乎在 ios 上工作正常,但是当我输入自己的凭据时,输入用户名和密码后,我会弹出一个窗口,显示“Safari 无法打开页面,因为地址无效”。这是我的主要问题,如果有人能提供建议,将非常感激。

更大的问题是我不明白代码中实际发生的情况。无论如何,我不想在身份验证后寻找重定向。我只是想将 token 返回到我的应用程序代码,因此我想关闭网络表单并将控制权返回到我的代码。但我却被弹出窗口困住了。 (这一切都工作正常并且符合示例中的预期,但是当我输入自己的凭据时,尽我所能根据示例中的注释找出它们,我收到此错误。)

我认为它必须对租户上的范围或重定向设置进行一些操作,但它在页面和文档中都非常不透明,这意味着什么什么是“范围”?首先,为什么示例中作为范围参数的值是 url?

据我所知,我希望范围是“OpenId”,因为我使用的是本地身份验证,但是如果将“范围”设置为 {“OpenId”},则会收到一条错误消息,指出这些范围已经是包括。但如果将其留空,您还会收到一条错误消息,指出需要范围。那么这是怎么回事?

关于租户设置页面,如果我只是在我的应用程序上构建一些服务登录服务,为什么我需要对“包括 web 应用程序/web api?”这个问题回答"is"。为什么回复 url 设置为不存在的值“https://myapi”?为什么应用程序 ID Uri 设置为“https://[applicationName]/onmicrosoft.com/demoapi ?其目的是什么?

在“ native 客户端”部分中,注册提供了预填充字段“重定向 Uri”和“自定义重定向 uri”。重定向 URI 类似于“urn:ietf:wg:oauth:2.0:oob”。那是什么?弹出窗口显示这是一个

"Unique identifier which B2C will redirect the user agent in an Oath2.0 response"

但看起来这里没有足够的字母来作为唯一 ID。

有一种叫做“自定义”重定向 URI 的东西,我猜它与普通的旧“重定向 URI”不同,看起来像

msal3b4c7038-694a-42d6-bab0-43d5b1f86106://auth

那么为什么其中一个是“自定义”而另一个显然不是自定义呢?

很抱歉提出所有问题,但我找不到很好的文档来解释这些问题。非常感谢,如果 Azure 的任何人都在倾听,也许他们可以指出一些 Xamarin/Azure 文档来帮助我理解这一点。

非常感谢!

PS 也许这篇文章有太多问题,不确定我是否应该将这些问题分成单独的问题。如果是这样,请告诉我。我的主要问题是第一个问题。

相关代码如下:

    public static string Tenant = "crowdwisdom.onmicrosoft.com";
public static string ClientID = "3b4c7038-694a-44c6-bab0-43d5b1f86106";
public static string PolicySignUpSignIn = "B2C_1_susi";
public static string PolicyEditProfile = "B2C_1_edit_profile";
public static string PolicyResetPassword = "B2C_1_reset";

public static string[] Scopes = { "https://crowdwisdom.onmicrosoft.com/demoapi/demo.read" };
public static string ApiEndpoint = "https://crowdwisdom.azurewebsites.net";

public static string AuthorityBase = $"https://login.microsoftonline.com/tfp/{Tenant}/";
public static string Authority = $"{AuthorityBase}{PolicySignUpSignIn}";
public static string AuthorityEditProfile = $"{AuthorityBase}{PolicyEditProfile}";
public static string AuthorityPasswordReset = $"{AuthorityBase}{PolicyResetPassword}";

public static UIParent UiParent = null;

...

async void OnSignInSignOut(object sender, EventArgs e)
{
try
{
if (btnSignInSignOut.Text == "Sign in")
{
AuthenticationResult ar = await App.PCA.AcquireTokenAsync(App.Scopes, GetUserByPolicy(App.PCA.Users, App.PolicySignUpSignIn), App.UiParent);
UpdateUserInfo(ar);
UpdateSignInState(true);
}
else
{
foreach (var user in App.PCA.Users)
{
App.PCA.Remove(user);
}
UpdateSignInState(false);
}
}
catch(Exception ex)
{
// Checking the exception message
// should ONLY be done for B2C
// reset and not any other error.
if (ex.Message.Contains("AADB2C90118"))
OnPasswordReset();
// Alert if any exception excludig user cancelling sign-in dialog
else if (((ex as MsalException)?.ErrorCode != "authentication_canceled"))
await DisplayAlert($"Exception:", ex.ToString(), "Dismiss");
}
}

以下是 Azure B2C 租户设置:

enter image description here

最佳答案

请参阅上面或下面我的其他答案,该答案回答了有关重定向 URI 的问题。

范围:

当您调用 API 时,范围大多是必需的。将它们视为权限。例如,您可以有一个“任务列表”API 来存储当天的任务。假设您希望您的应用程序能够从 API“读取”。因此,您调用 Azure AD B2C,并请求一个访问 token ,该 token 使您能够从 API“读取”。您可以通过插入“read”作为请求中的范围之一来完成此操作。

问题是,任何 API 都可以有读取范围,因此为了区分您引用的是哪个 API,您可以使用 App ID URI。因此,在 Azure AD B2C 中,将应用程序 ID URI 设置为“https://tenantName.onmicrosoft.com/tasksList ”。然后,当您发出请求时,将范围指定为“https://tenantName.onmicrosoft.com/tasksList/read ”(请注意,“read”已添加到该“URL”的末尾)

关于适用于 Xamarin.forms "Safari cannot open the page because the address is invalid"的 Azure AD B2C?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45382197/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com