除了一个小问题,我有 IDS4 和 Xamarin.Forms 应用程序都可以正常工作。每次 iOS 应用程序访问 IDP 服务器时,它都会首先给我这个提示:
“AppName”想要使用“”登录 这允许应用程序和网站共享有关您的信息
这是什么原因造成的?
除了一个小问题,我有 IDS4 和 Xamarin.Forms 应用程序都可以正常工作。每次 iOS 应用程序访问 IDP 服务器时,它都会首先给我这个提示:
“AppName”想要使用“”登录 这允许应用程序和网站共享有关您的信息
这是什么原因造成的?
我在使用 IdentityModel.OidcClient2 时遇到此错误。请参阅此链接了解原因。这是它的要点:
这是 iOS 11 中添加到SFAuthenticationSession
. 它是由 AppAuth 中的这段代码触发的:
SFAuthenticationSession* authenticationVC =
[[SFAuthenticationSession alloc] initWithURL:requestURL
callbackURLScheme:redirectScheme
completionHandler:^(NSURL * _Nullable callbackURL,
NSError * _Nullable error) {
没有办法摆脱对话框,除了不使用SFAuthenticationSession
这意味着你失去单点登录,这更糟。
通过使用 MLeech HERE提到的方法,我最终使用了 SFSafariViewController 而不是 SFAuthenticationSession
这基本上意味着将这些行添加到您的 AppDelegate.cs
public override UIWindow Window
{
get;
set;
}
public static Action<string> CallbackHandler { get; set; }
public override bool OpenUrl(UIApplication application, NSUrl url, string sourceApplication, NSObject annotation)
{
CallbackHandler(url.AbsoluteString);
CallbackHandler = null;
return true;
}
然后将此代码用于您的 SFAuthenticationSessionBrowser.cs
public class SFAuthenticationSessionBrowser : IBrowser
{
public Task<BrowserResult> InvokeAsync(BrowserOptions options)
{
var task = new TaskCompletionSource<BrowserResult>();
var safari = new SFSafariViewController(new NSUrl(options.StartUrl));
AppDelegate.CallbackHandler = async url =>
{
await safari.DismissViewControllerAsync(true);
task.SetResult(new BrowserResult()
{
Response = url
});
};
// https://forums.xamarin.com/discussion/24689/how-to-acces-the-current-view-uiviewcontroller-from-an-external-service
var window = UIApplication.SharedApplication.KeyWindow;
var vc = window.RootViewController;
while (vc.PresentedViewController != null)
{
vc = vc.PresentedViewController;
}
vc.PresentViewController(safari, true, null);
return task.Task;
}
}