C# 无法在.NET桌面应用程序中检索访问令牌
我正在编写一个在Windows计算机上运行的.NET应用程序。无法通过浏览器访问它。问题是,我不能像应该的那样进行身份验证。我目前正在用C#.NET编写代码,更具体地说是用C#C# 无法在.NET桌面应用程序中检索访问令牌,c#,.net,facebook,facebook-authentication,C#,.net,Facebook,Facebook Authentication,我正在编写一个在Windows计算机上运行的.NET应用程序。无法通过浏览器访问它。问题是,我不能像应该的那样进行身份验证。我目前正在用C#.NET编写代码,更具体地说是用C# 我的表单上有一个webbrowser控件 用户通过此webbrowser控件登录到facebook 登录后,我启动身份验证过程 然后我检索一个代码 这就是问题所在。使用此代码,我想获得一个访问令牌。 生成的请求URL如下所示:https://graph.facebook.com/oauth/access_token?
- 我的表单上有一个webbrowser控件
- 用户通过此webbrowser控件登录到facebook
- 登录后,我启动身份验证过程
- 然后我检索一个代码
https://graph.facebook.com/oauth/access_token?client_id=____MY_APP_ID______&redirect_uri=http://localhost/&client_secret=_____MY_APP_SECRET_____&code=____MY_RETREIVED_CODE_____
并通过以下代码生成
请注意,我的重定向URL是http://localhost
。这应该没问题吧
另外,在我的应用程序设置中,我有以下信息
网站URL:http://localhost/
站点域:localhost
执行此操作时,会出现以下错误:
用户代码未处理Webexception
远程服务器返回错误:(400)请求错误
以下是我认为可能会出错的地方:
- 我的应用程序设置正确吗
- 我的重定向url应该是
,即使实际上没有一个服务在监听http://localhost
- 如何消除此错误并检索访问令牌
提前谢谢 您出现此错误是因为您不应该从桌面应用程序调用此URL:据我所知,您不能使用令牌端点进行桌面应用程序身份验证。此外,您还可以直接获取访问令牌(无需先请求代码)。这是你必须做的 在嵌入式web浏览器中加载以下URL:
https://www.facebook.com/dialog/oauth?
client_id=YOUR_APP_ID&
redirect_uri=https://www.facebook.com/connect/login_success.html
将要求用户登录,并使用URL中的访问令牌重定向到此URL:
https://www.facebook.com/connect/login_success.html#access_token=...
因此,您必须检测重定向并从URL检索访问令牌。谢谢quinten
然而,我通过使用C#Facebook SDK解决了自己的问题。
这个软件开发工具包真的帮了大忙
包括大量样品(包括授权)
任何使用facebook在.NET中编程的人都应该查看它!为facebook编写代码现在容易多了
非常感谢!我也有同样的问题。但如果我的应用程序在终端上运行,你会怎么做呢?我肯定没有合适的浏览器。更多细节:我正在构建一个KDE Plasmoid,将状态发布到Facebook帐户。我不能有一个嵌入式浏览器也。我正在使用Python。拥有浏览器的最佳方式是使用Mechanize模块(如果有帮助的话):)你好,主人。由于oauth流和安全原因,您无法让用户在没有浏览器的情况下登录Facebook。。。您可以尝试通过在Python中处理HTTP请求来模拟浏览器进行黑客攻击,但我不确定这一点。您将询问用户的用户名和密码,这违反了Facebook的服务条款。感谢您的回复。但即使在嵌入式浏览器中,我(Facebook)也会要求输入用户名/密码。如果是我的浏览器,我可以很好地检索用户名和密码,而用户也不知道。如果你使用嵌入式浏览器,你手中就不会有用户的凭据,因为他将直接在Facebook网站上键入这些凭据(当然,如果你听击键的话除外)。无论如何,最终用户将不知道您是否听取了他的凭据,他信任开发人员,您可以做任何您想做的事情。不是你不能,而是你不应该。如果你选择这样做,Facebook不会让你的生活更轻松(没有图书馆,没有文档等)。谢谢你的回复。:-)我针对我的问题提出了一个新问题。
https://www.facebook.com/connect/login_success.html#access_token=...