使用Box Windows SDK v2库在C#桌面应用程序中对Box进行身份验证

jpreed00

看起来这应该很简单,但是我找不到一个示例或足够详尽的文档来弄清楚它。

我有一个C#桌面应用程序,我想通过Box API与Box集成。我认为使用Box Windows SDK v2 for .NET将是必经之路。

有人可以指出一个简单的,适用于桌面应用程序的简单例子吗?

jpreed00

我决定尝试自己解决这个问题。即使OAuth2支持基于非浏览器的身份验证,Box.com显然也决定不实施它(或者,至少在任何地方我都没有提及如何实现它)。

因此,基于桌面的应用程序的唯一替代方法是以某种方式截获发生的URL重定向,并从查询字符串参数中提取身份验证信息。

但是,由于IE最近落后于时代,并且我正在使用C#和.NET,因此我决定考虑嵌入其他浏览器,而不是使用内置的浏览器控件。我选择了Awesomium,这是一个托管的.NET Chromium包装器。

因此,事不宜迟,我提出了适用于桌面应用程序的基本示例。

我的解决方案有两种形式,一种是纯粹用作“浏览器”的形式,另一种是主要形式:frmMain包含所有代码,而frmBrowser包含Awesomium控件。

using Newtonsoft.Json.Linq;
using System.Web;

private static frmBrowser browser = null;
private const string BoxClientId = "{your client id}";
private const string BoxSecret = "{your secret}";    

private void authenticateWithBox()
{
   browser = new frmBrowser();
   browser.Show();

   browser.webControl1.Source = new Uri("https://www.box.com/api/oauth2/authorize?response_type=code&client_id=" + BoxClientId + "&redirect_uri=https://localsess");
   browser.webControl1.AddressChanged += new Awesomium.Core.UrlEventHandler(webControl1_AddressChanged);
}

void webControl1_AddressChanged(object sender, Awesomium.Core.UrlEventArgs e)
{
  //MessageBox.Show(e.Url.ToString());
  if (e.Url.Host == "localsess")
  {
    NameValueCollection parms = HttpUtility.ParseQueryString(e.Url.Query);
    if (parms.AllKeys.Contains("error"))
    {
       MessageBox.Show("Error connecting to Box.com: " + parms["error"] + " " + parms["error_description"]);
    }
    else
    {
        boxContinue(parms["code"]);
    }
  }
}

上面的代码就是神奇的地方。每次Web控件显示的URL更改时,都会触发AddressChanged事件。因此,您必须将重定向URL设置为可以检测到的唯一内容-甚至不必存在,如示例代码所示。然后,您可以提取所需的参数并继续进行身份验证过程。

string postToUrl(string url, string data)
{
  string results = String.Empty;
  WebRequest req = WebRequest.Create(url);
  req.Method = WebRequestMethods.Http.Post;
  byte[] byteArray = Encoding.UTF8.GetBytes(data);
  req.ContentType = "application/x-www-form-urlencoded";
  req.ContentLength = byteArray.Length;
  Stream dataStream = req.GetRequestStream();
  dataStream.Write(byteArray, 0, byteArray.Length);
  dataStream.Close();
  WebResponse res = req.GetResponse();
  dataStream = res.GetResponseStream();
  StreamReader reader = new StreamReader(dataStream);
  results = reader.ReadToEnd();
  return results;
}

void boxContinue(string code)
{
  browser.Close();
  browser.Dispose();
  string json = postToUrl("https://www.box.com/api/oauth2/token", "code=" + code + "&grant_type=authorization_code&client_id=" + BoxClientId + "&client_secret=" + BoxSecret);
  JToken token = JObject.Parse(json);

  string access_token = (string)token.SelectToken("access_token");
  string refresh_token = (string)token.SelectToken("refresh_token");
}

void boxRefresh(string refresh_token)
{
  string json = postToUrl("https://www.box.com/api/oauth2/token", "grant_type=refresh_token&refresh_token=" + refresh_token + "&client_id=" + BoxClientId + "&client_secret=" + BoxSecret);
  JToken token = JObject.Parse(json);

  string access_token = (string)token.SelectToken("access_token");
  string new_refresh_token = (string)token.SelectToken("refresh_token");
}

其余代码只是您的常规身份验证代码,该代码使用令牌和先前请求中的令牌获取更多令牌等。Box使用“ refresh_tokens”使您能够获取其他访问令牌,我展示了一个如何做到这一点的例子。

如果您发现任何错误或有任何评论等,请发表评论。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Box Windows SDK v2库在C#桌面应用程序中对Box进行身份验证

来自分类Dev

对单个操作而非整个应用程序使用Windows身份验证进行身份验证

来自分类Dev

使用Firestore进行C#桌面应用程序身份验证

来自分类Dev

Windows Phone 8应用程序上的Live Connect SDK是否“身份验证失败”?

来自分类Dev

Unity Facebook SDK使用正确的appid但使用错误的显示应用程序进行身份验证

来自分类Dev

使用Box.com SDK for Python

来自分类Dev

在同一MVC应用程序中同时使用OWIN Cookie身份验证和Windows身份验证

来自分类Dev

使用LinkedIn的iOS 9 SDK通过Webview而不是LinkedIn的移动应用程序进行身份验证

来自分类Dev

如何在Amazon PHP SDK v3中使用v2身份验证标头?

来自分类Dev

使用Windows身份验证模拟MVC应用程序中的Active Directory用户

来自分类Dev

使用Windows身份验证模拟MVC应用程序中的Active Directory用户

来自分类Dev

使用 Xero 的 Java SDK 来支持多个私有应用程序的身份验证?

来自分类Dev

使用Windows身份验证和Web应用程序的IIS与Web应用程序

来自分类Dev

使用Windows SDK 8.1在Windows 7上进行开发

来自分类Dev

在线SharePoint:Windows客户端应用程序可以使用OAuth进行身份验证吗?

来自分类Dev

在Windows应用程序中将Windows身份验证与Sql Server一起使用

来自分类Dev

我可以使用Windows Phone 8 SDK开发Windows Phone 7.1应用程序吗?

来自分类Dev

使用Windows 8.1应用程序中使用Visual C ++ 2012构建的Windows 8.0 Extension SDK组件

来自分类Dev

您的应用程序使用从没有被translate.googleapis.com支持谷歌云SDK最终用户证书进行身份验证

来自分类Dev

使用Windows身份验证将Power BI嵌入到本地ASP.NET Web应用程序中

来自分类Dev

使用.Net Core中的Windows经过身份验证的应用程序填充来自SQL的自定义声明

来自分类Dev

使用BOX SDK iOS获取文件下载链接

来自分类Dev

Box IOS SDK V2取消下载/上传操作

来自分类Dev

于Windows的盒子SDK Api V2

来自分类Dev

使用Facebook和Google+提供者身份验证的Amazon Cognito iOS SDK V2的问题

来自分类Dev

无法将Box API Enterprise API与OAuth2身份验证的应用程序一起使用

来自分类Dev

使用Windows身份验证和模拟的Web应用程序的IIS

来自分类Dev

Windows SDK for生产版本的应用程序

来自分类Dev

Github:如何使用SecurID桌面应用程序进行两因素身份验证?

Related 相关文章

  1. 1

    使用Box Windows SDK v2库在C#桌面应用程序中对Box进行身份验证

  2. 2

    对单个操作而非整个应用程序使用Windows身份验证进行身份验证

  3. 3

    使用Firestore进行C#桌面应用程序身份验证

  4. 4

    Windows Phone 8应用程序上的Live Connect SDK是否“身份验证失败”?

  5. 5

    Unity Facebook SDK使用正确的appid但使用错误的显示应用程序进行身份验证

  6. 6

    使用Box.com SDK for Python

  7. 7

    在同一MVC应用程序中同时使用OWIN Cookie身份验证和Windows身份验证

  8. 8

    使用LinkedIn的iOS 9 SDK通过Webview而不是LinkedIn的移动应用程序进行身份验证

  9. 9

    如何在Amazon PHP SDK v3中使用v2身份验证标头?

  10. 10

    使用Windows身份验证模拟MVC应用程序中的Active Directory用户

  11. 11

    使用Windows身份验证模拟MVC应用程序中的Active Directory用户

  12. 12

    使用 Xero 的 Java SDK 来支持多个私有应用程序的身份验证?

  13. 13

    使用Windows身份验证和Web应用程序的IIS与Web应用程序

  14. 14

    使用Windows SDK 8.1在Windows 7上进行开发

  15. 15

    在线SharePoint:Windows客户端应用程序可以使用OAuth进行身份验证吗?

  16. 16

    在Windows应用程序中将Windows身份验证与Sql Server一起使用

  17. 17

    我可以使用Windows Phone 8 SDK开发Windows Phone 7.1应用程序吗?

  18. 18

    使用Windows 8.1应用程序中使用Visual C ++ 2012构建的Windows 8.0 Extension SDK组件

  19. 19

    您的应用程序使用从没有被translate.googleapis.com支持谷歌云SDK最终用户证书进行身份验证

  20. 20

    使用Windows身份验证将Power BI嵌入到本地ASP.NET Web应用程序中

  21. 21

    使用.Net Core中的Windows经过身份验证的应用程序填充来自SQL的自定义声明

  22. 22

    使用BOX SDK iOS获取文件下载链接

  23. 23

    Box IOS SDK V2取消下载/上传操作

  24. 24

    于Windows的盒子SDK Api V2

  25. 25

    使用Facebook和Google+提供者身份验证的Amazon Cognito iOS SDK V2的问题

  26. 26

    无法将Box API Enterprise API与OAuth2身份验证的应用程序一起使用

  27. 27

    使用Windows身份验证和模拟的Web应用程序的IIS

  28. 28

    Windows SDK for生产版本的应用程序

  29. 29

    Github:如何使用SecurID桌面应用程序进行两因素身份验证?

热门标签

归档