Macos 从Mac(Xamarin)登录到Microsoft Graph API
我正在尝试将我的Mac应用程序(用c#/Visual Studio for Mac编写)连接到Microsoft的Graph API 在Windows上,我可以使用ADAL并执行以下操作:Macos 从Mac(Xamarin)登录到Microsoft Graph API,macos,xamarin.mac,visual-studio-mac,Macos,Xamarin.mac,Visual Studio Mac,我正在尝试将我的Mac应用程序(用c#/Visual Studio for Mac编写)连接到Microsoft的Graph API 在Windows上,我可以使用ADAL并执行以下操作: PublicClientApplication myApp = new PublicClientApplication(MYID); string Scope = "User.ReadBasic.All User.Read"; var result = awai
PublicClientApplication myApp = new PublicClientApplication(MYID);
string Scope = "User.ReadBasic.All User.Read";
var result = await myApp.AcquireTokenAsync(Scope.Split(' '));
return result.AccessToken;
而Mac上的相同方法会导致“未实现”异常
我尝试了几种方法,比如SimpleAuth的ADFSApi和MicrosoftLiveConnectApi,但没有成功
有人知道如何进行此验证吗?另一方面,我经常发现使用浏览器的指南。。。如何使用代码从应用程序读取浏览器的响应以获取令牌
-------------更新---------------------
工作数小时后,我实现了另一种流程。基本上,当按下登录按钮时,我会执行一个只包含WebView的窗口的切换
public override void ViewDidLoad()
{
base.ViewDidLoad();
var webView = new WebKit.WebView(this.MainView.Frame, "officeWebView", "noName");
webView.MainFrameUrl = "https://login.microsoftonline.com/common/oauth2/v2.0/authorize?state=ltxzlgtghhxgpwuh&client_id=[MYID]&response_type=code&scope=User.ReadBasic.All%20User.Read&redirect_uri=msal[MYID]://auth";
webView.FinishedLoad += (sender2, e) =>
{
var url = ((WebKit.WebView)sender2).MainFrameUrl;
};
this.MainView.AddSubview(webView);
}
登录结束时,系统会提示我一条消息,如“没有可打开MSAL[MYID]的应用程序等。因此,我在info.plist中添加了“绑定”
其中,URL方案实际上是MSAL[MYID]
我在AppDelegate.cs中实现了OpenURL方法
public override void OpenUrls(NSApplication application, NSUrl[] urls)
{
Console.WriteLine("TEST!!!");
foreach(var url in urls)
Console.WriteLine(url);
base.OpenUrls(application, urls);
}
但OpenURL似乎从未被触发(从未打印过一行,从未命中断点)
怎么了?如果我成功地做到了这一点,我如何才能转移到隐式授权以保证我的应用程序的安全?我不知道您的具体情况。但是您可以使用WebKit.WebView 在我的例子中,我通过自己的网站使用facebook登录,并通过重定向url将facebook令牌传递回 分配FrameLoadDelegate
webView.FrameLoadDelegate = this;
webView.MainFrameUrl = starturlhere;
实现webView:didFinishLoadForFrame:
[Export ("webView:didFinishLoadForFrame:")]
public void FinishedLoad (WebKit.WebView sender, WebKit.WebFrame forFrame)
{
// page loaded
System.Diagnostics.Debug.WriteLine("FinishedLoad: "+sender.MainFrameUrl);
var url = new NSUrl(sender.MainFrameUrl);
var document = sender.MainFrameDocument;
// check if this is the login result
// if not do nothing and return (login flow not done)
}
从url或加载的页面提取所需数据
//更新
如果未通过您自己的服务器登录。请为(或任何真正的)设置重定向url,并使用以下其中一项截获重定向(检查正确的url):
我正在尝试这样做,几乎成功了。但在登录的最后一部分,我开始出现以下错误:NSURLSession/NSURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9800)。我已经在info.plist中添加了允许不安全连接的所有标志,但它似乎不起作用允许登录流上的不安全连接?但没有更多细节,很难说。kCFStreamErrorDomainSSL上有许多帖子,但这是一个不同的问题。我解决了向OAuth Auth调用添加重定向URI的错误。现在stem应该调用我的OpenURL方法,但它没有被触发。我正在添加问题的内容,以便更容易理解。也许你可以重定向到127.0.0.1 localhost并从webview中捕获url。那时不需要OpenURL。效果非常好!谢谢!附言:我试图构建一个全新的项目和“info.plist”“这些东西起作用了。所以它必须与其他插件或以前的应用程序配置相关
webView.ReceivedServerRedirectForProvisionalLoad += (object sender, WebFrameEventArgs e) =>
{
//e.ForFrame.ProvisionalDataSource.Request.Url;
};
webView.OnSendRequest += (WebView sender, NSObject identifier, NSUrlRequest request, NSUrlResponse redirectResponse, WebDataSource dataSource) =>
{
//request.Url;
};