使用WebAuthenticationBroker做Facebook账号验证

因为 Facebook 的流行,现在很多开发人员都会运用 Facebook 账号作为应用程序的身份验证,在 WinRT 中有一个很好用的一组 API: WebAuthenticationBroker,它提供了一个架构,让应用程序很容易就能完成 OAuth 的验证机制。过去要在应用程序中完成 OAuth 验证,总是会很麻烦地在应用程序或网页浏览器之间切换 (因为网站登入及授权须在网页中完成) ,容易造成使用者的混淆,这组 API 让整个验证的过程皆在应用程序的对话盒中完成,可以让用户留在应用程序中完成一切的动作。

在 Metro Style App 中使用 WebAuthenticationBroker

以 Facebook 为例

参考 Facebook 的开发文件,整个验证的工作可以归纳成几件事情:

1.注册你的应用程序,取得一个应用程序的身份,得到一个「应用程序 ID」
2.视你应用程序的需要,组合成一个 URL,接着让使用者透过这个 URL 来授权你的应用程序 (用户须登入 facebook)
3.完成授权,取得 access_token 以便呼叫 facebook APIs。(当然要处理授权失败的状况)
这些动作要使用 WebAuthenticationBroker 来完成便非常简单,直接来看程序代码 (JavaScript) 就好了解了:

// 組合授權的 URLvar authUrl = new Windows.Foundation.Uri([  "https://www.facebook.com/dialog/oauth?",  "client_id=<你的應用程式 ID>",  "&redirect_uri=",  encodeURIComponent('https://www.facebook.com/connect/login_success.html'),  "&response_type=token",  "&display=popup",  "&scope=<權限列表,以 , 隔開>"].join(''));

 // 回呼 URLvar callbackUrl = new Windows.Foundation.Uri("https://www.facebook.com/connect/login_success.html");

 // 呼叫 WebAuthenticationBroker// 因為回傳的是 Promise 物件,
所以可以接著 done 函式執行Windows.Security.Authentication.Web.WebAuthenticationBroker.authenticateAsync(  Windows.Security.Authentication.Web.WebAuthenticationOptions.none,  authUrl, callbackUrl).done(
function(result) {    // 完成授權的動作,檢查授權是否成功    if (result.response
Status === Windows.Security.Authentication.Web.WebAuthenticationStatus.success) {      // 成功授權,從 result.responseData 中取得 access_token 以及 expires_in 的值    } else {      // 使用者並不同意授權    }  },  function(error) {    // 處理發生錯誤的狀況  });

值得注意的是,在 authUrl 中的 display=popup 参数一定要设定,才会符合 Metro Style App 的画面,于是乎你就可以做出上面图示的效果了!

同场加映 C# 版本:

using Windows.Foundation;using Windows.Security.Authentication.Web;

 // 組合授權的 URLvar authUrl = new Uri(string.Format(  "https://www.facebook.com/dialog/oauth?client_id={0}&redirect_uri={1}&response_type=token&display=popup&scope={2}",  "<你應用程式的 ID>",  Uri.EscapeDataString("https://www.facebook.com/connect/login_success.html"),  "<權限列表,以 , 隔開>"));

 // 回呼 URLvar callbackUrl = new Uri("https://www.facebook.com/connect/login_success.html");

 // 呼叫 WebAuthenticationBrokervar result = await WebAuthenticationBroker.authenticateAsync(  WebAuthenticationOptions.none, authUrl, callbackUrl);

 // 完成授權的動作,檢查授權是否成功if (result.ResponseStatus == WebAuthenticationStatus.Success) {  // 成功授權,從 result.ResponseData 中取得 access_token 以及 expires_in 的值} else {  // 處理發生錯誤的狀況}

以及 C++/CX 版本:

#include <sstream>

 using namespace std;

 using namespace Windows::Foundation;using namespace Windows::Security::Authentication::Web;

 // 組合授權的 URLwstringstream rawUri;rawUri << L"https://www.facebook.com/dialog/oauth?"  << L"client_id=" << <應用程式 ID>  << L"&redirect_uri=https%3A%2F%2Fwww.facebook.com%2Fconnect%2Flogin_success.html"  << L"&response_type=token"  << L"&display=popup"  << L"&scope=" << <權限列表,以 , 隔開>;auto authUrl = ref new Uri(ref new String(rawUri.str().c_str()));

 // 回呼 URLauto callbackUrl = ref new Uri("https://www.facebook.com/connect/login_success.html");

 // 以非同步形式呼叫 WebAuthenticationBrokercreate_task(WebAuthenticationBroker::AuthenticateAsync(  WebAuthenticationOptions::
None, startURI, endURI))    .then([this](WebAuthenticationResult^ result){  switch (result->ResponseStatus)  {  case WebAuthenticationStatus::Success:    // 使用者授權成功,從 result->ResponseData 中取得 access_token 以及 expires_in    break;  ...  }}

时间: 2024-07-31 05:52:40

使用WebAuthenticationBroker做Facebook账号验证的相关文章

账号验证不通过怎么阻止表单提交js+php

问题描述 账号验证不通过怎么阻止表单提交js+php 提示: 下一步 解决方案 return false ; 解决方案二: 描述太简单吧 前台阻止:form 直接不写button和submit按钮(以前就碰到过,submit和button按钮无法用js阻止提交),form标签外写一个,用jquery form插件提交 后台:检查不通过直接exit 相关文章 php-用PHP做后台登陆界面时候所遇到的问题 ajax验证用户名是否存在,失败后组阻止表单提交 弹出框-js,jquery,表单验证 js

在Amazon.com上登录其Facebook账号,创建一个个性化礼品卡

现在客户可以在Amazon.com上登录其Facebook账号,创建一个个性化礼品卡并发送到接收者的Facebook上.Amazon称这种发送礼品卡的方式是目前最简单的,公司正加快该Facebook选项的开发进度,争取在假期季前及时发布.在登录Facebook账号后,发送者可以选择卡片的设计,金额上限为5000美元,并可在卡片中附加信息.另外,用户还可以设置定时发送,定时设置最多可以提前一年.另外,Amazon正在开展一场名为"给予5,收获5美金"的限时促销活动.Amazon的这种利用

rabbitmq mqtt adapter 没办法做ssl证书验证

问题描述 rabbitmq mqtt adapter 没办法做ssl证书验证 rabbitmq mqtt adapter 没办法做ssl证书验证,客户端用证书一直连接不上,不知道哪位有这方面经验? 解决方案 rabbitmq3.5才支持证书验证,不过目前我还没配置成功 解决方案二: rabbitmq3.5才支持证书验证,不过目前我还没配置成功 解决方案三: rabbitmq3.5才支持证书验证,不过目前我还没配置成功 解决方案四: rabbitmq3.5才支持证书验证,不过目前我还没配置成功 解

MVC5 + EF6 + Bootstrap3 (15) 应用ModelState和Data Annotation做服务器端数据验证

原文:MVC5 + EF6 + Bootstrap3 (15) 应用ModelState和Data Annotation做服务器端数据验证 Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-server-side-validation.html  系列教程:MVC5 + EF6 + Bootstrap3 上一节:MVC5 + EF6 + Bootstrap3 (14) 分部视图PartialView 源码下

如何用facebook账号登陆自己的网站,并把从facebook获取的信息,保存到网站的数据库

问题描述 如何用facebook账号登陆自己的网站,并把从facebook官网获取的信息,保存到网站的数据库,有示例最好,我现在可以实现的就是,能用账号登陆,但是不能把获取的信息,保存到网站的数据库... 解决方案 解决方案二:从facebook登录完成跳回你的网站,你收到了什么数据?facebook应该会把登录用户的一些信息返回給你的

前端开发-javascript做表单验证的时候没有调用函数?

问题描述 javascript做表单验证的时候没有调用函数? <form> 用户名: <input type="text"name="username"/> <br/> 密码: <input type="password"name="password"> <br/> 确认密码: <input type="password"name="

电商网站纷纷开始做公众账号 意义何在

近期,天猫无线做出了大改动,采用了公众账号订阅的模式,此举让很多人认为是参考微信公众平台的做法.同时,淘宝手机网页版也加入了"微淘",同样也是关注账号的模式.而在移动互联网方面,"微信"作为"第一个拿到船票"的app,不免会引领一些风潮,尤其是公众账号概念的推广.很多互联网公司肯定之前也思考过"公众开放平台"的产品,但还是拥有大量用户的微信率先做了.同时,微信公共账号的成功,也让大批效仿者更加坚定了信心 .在这个时机天猫app

webservice-java 访问webService 怎么做windows 域验证

问题描述 java 访问webService 怎么做windows 域验证 地址大概是这个样子的,http://erp3.domain.ext:8000/sap/bc/srt/wsdl/bndg_54A6EE6788AE005DE10080000AB450B9/wsdl11/allinone/ws_policy/document?sap-client=800 浏览器访问的时候 现在需要在java中来做,读取数据存到数据库 解决方案 http://bbs.csdn.net/topics/39020

我想在datagridview离开行的时候做一个数据验证,如果不正确就回到上一次的行.

问题描述 我想在datagridview离开行的时候做一个数据验证,如果不正确就回到上一次的行.privatevoidDGV_bDT_CellEnter(objectsender,DataGridViewCellEventArgse){///没有过验证DGV_bDT.CurrentCell=DGV_bDT.Rows[xxx].Cells[xxx];}这时出错OperationisnotvalidbecauseitresultsinareentrantcalltotheSetCurrentCell