以下與Xamarin原生sample,樣品本身似乎工作正常ios,但是當我把我自己的憑據,輸入用戶名和密碼後,我彈出一個說:「Safari無法打開頁面,因爲地址是無效」。這是我的主要問題,如果有人可以建議,將非常感激。Xamarin.forms的Azure AD B2C「Safari因地址無效而無法打開頁面」?
雖然更大的問題是我不明白代碼中究竟發生了什麼。無論如何,我不在尋找重定向。我只是試圖讓一個令牌回到我的應用程序的代碼中,所以我想關閉Webform並將控制權返回給我的代碼。但是,我堅持彈出。 (這一切都可以在樣本中正常工作,但是當我放入自己的證書時,儘可能根據樣本中的筆記找出它們,我會得到此錯誤。)
我是認爲它必須對範圍或Tenant上的重定向設置做些什麼,但它在頁面和文檔中都非常不透明,這意味着什麼什麼是「範圍?」首先,爲什麼在範例參數中的值是一個url的樣本?
從我所知道的情況來看,我希望範圍是「OpenId」,因爲我使用的是本地認證,但如果將「範圍」設置爲{「OpenId」},則會出現錯誤,指出這些範圍是已包括在內。但是,如果您將其留空,您還會收到一條說明範圍是必需的錯誤。那該怎麼辦?
對於租戶設置頁面,如果我只是在我的應用上創建了一些服務登錄信息,爲什麼我需要回答「是」包含web應用/ web api?爲什麼回覆url設置爲不存在的值「https://myapi」?爲什麼App ID Uri設置爲「https://[applicationName]/onmicrosoft.com/demoapi?並且它的用途是什麼?
在」Native Client「部分,註冊提供了預填充字段」Redirect Uri「和」custom redirect uri「。重定向URI看起來像「甕:IETF:WG:OAuth的:2.0:OOB」?那是什麼在彈出的說,這是一個
「唯一的標識符,B2C將重定向用戶代理在 Oath2.0響應」
但它看起來不像這裏有足夠的字母可能是唯一的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租戶設置: