c#实现microsoft账号登入授权(OAuth 2.0)并获取个人信息
本博主要介绍microsoft 账号授权(OAuth 2.0)登入并获取用户信息的过程,因为写过google账号授权登入的过程,所以这里就简单介绍一下,google授权登入参考地址:http://www.cnblogs.com/JohnnyYin/p/3447217.html
1.去microsoft官网注册账号,注册完了账号再注册一个app,地址:https://account.live.com/developers/applications/index
2.其他都不详细介绍了,直接上code
/// <summary>
/// the access token
/// </summary>
private static string accessToken; /// <summary>
/// the application id
/// </summary>
private static string clientID = ConfigurationSettings.AppSettings["WL_ClientID"].ToString(); /// <summary>
/// the application secret
/// </summary>
private static string clientSecret = ConfigurationSettings.AppSettings["WL_ClientSecret"].ToString(); /// <summary>
/// the application redirect uri path
/// </summary>
private static string redirectUri = ConfigurationSettings.AppSettings["WL_RedirectUri"].ToString();
/// <summary>
///Get the login with microsoft url
/// </summary>
/// <returns></returns>
/// <author>Johnny</author>
/// <date>2013/11/15, 16:37:08</date>
/// <returns>return a twitter login url</returns>
public string GetLoginUrl()
{
string loginUrl = null;
try
{
loginUrl = string.Format("https://login.live.com/oauth20_authorize.srf?" +
"client_id={0}&scope={1}&response_type=code&redirect_uri={2}",
HttpUtility.UrlEncode(clientID),
HttpUtility.UrlEncode("wl.basic,wl.emails"),
HttpUtility.UrlEncode(redirectUri)
);
}
catch (Exception)
{ throw;
}
return loginUrl;
}
/// <summary>
///general a post http request
/// </summary>
/// <author>Johnny</author>
/// <date>2013/11/20, 09:21:33</date>
public string Post(string url, string parameters)
{
byte[] postData = System.Text.Encoding.ASCII.GetBytes(parameters); System.Net.ServicePointManager.Expect100Continue = false;
WebRequest request = WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = postData.Length; Stream requestStream = request.GetRequestStream(); requestStream.Write(postData, , postData.Length);
requestStream.Close(); WebResponse response = request.GetResponse();
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
string content = reader.ReadToEnd();
reader.Close();
stream.Close(); return content;
}
/// <summary>
///Get an access token
/// </summary>
/// <author>Johnny</author>
/// <date>2013/11/15, 16:37:08</date>
/// <returns>return an access token</returns>
public string GetAccessToken()
{
try
{
if (string.IsNullOrEmpty(accessToken))
{
string code = HttpContext.Current.Request.Params["code"];
if (code != null)
{
string tokenUrl = string.Format("https://login.live.com/oauth20_token.srf");
var post = string.Format("client_id={0}&redirect_uri={1}&client_secret={2}&code={3}&grant_type=authorization_code",
HttpUtility.UrlEncode(clientID),
HttpUtility.UrlEncode(redirectUri),
clientSecret,
code);
string result = this.Post(tokenUrl, post);
accessToken = JsonConvert.DeserializeAnonymousType(result, new { access_token = "" }).access_token;
}
}
}
catch (Exception)
{ throw;
}
return accessToken;
}
/// <summary>
///windows live user profile
/// </summary>
/// <author>Johnny</author>
/// <date>2013/11/18, 16:05:51</date>
private class UserProfile
{
public string id { get; set; }
public emails emails { get; set; }
public string name { get; set; }
public string first_name { get; set; }
public string last_name { get; set; }
public string link { get; set; }
public string gender { get; set; }
public string updated_time { get; set; }
public string locale { get; set; }
public string timezone { get; set; }
} private class emails
{
public string preferred { get; set; }
public string account { get; set; }
public string personal { get; set; }
public string business { get; set; }
} /// <summary>
///Get the current user information
/// </summary>
/// <author>Johnny</author>
/// <returns>return an UserInfo</returns>
/// <date>2013/11/15, 16:37:08</date>
/// <returns>return the current user information</returns>
public UserProfile GetUserInfo()
{
UserProfile userInfo = null;
try
{
if (!string.IsNullOrEmpty(accessToken))
{
string result = "";
string profileUrl = string.Format("https://apis.live.net/v5.0/me?access_token={0}", accessToken);
result = webHelper.Get(profileUrl, "");
var data = JsonConvert.DeserializeAnonymousType(result, new UserProfile());
}
else
{
throw new Exception("ERROR: [GoogleProvider] the access token is null or not valid.");
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
} return userInfo;
}
/// <summary>
///general a get http request
/// </summary>
/// <author>Johnny</author>
/// <date>2013/11/20, 09:21:33</date>
public string Get(string url, string parameters)
{
if (parameters != null && parameters != "")
{
if (url.Contains("?"))
{
url += "&" + parameters;
}
else
{
url += "?" + parameters;
}
} WebRequest request = WebRequest.Create(url);
WebResponse response = request.GetResponse(); Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
string content = reader.ReadToEnd();
reader.Close();
stream.Close(); return content;
}
http request 辅助方法
/// <summary>
///general a get http request
/// </summary>
/// <author>Johnny</author>
/// <date>2013/11/20, 09:21:33</date>
public string Get(string url, Dictionary<string, string> parameters)
{
return Get(url, DictionaryToString(parameters));
} /// <summary>
///general a get http request
/// </summary>
/// <author>Johnny</author>
/// <date>2013/11/20, 09:21:33</date>
public string Get(string url, string parameters)
{
if (parameters != null && parameters != "")
{
if (url.Contains("?"))
{
url += "&" + parameters;
}
else
{
url += "?" + parameters;
}
} WebRequest request = WebRequest.Create(url);
WebResponse response = request.GetResponse(); Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
string content = reader.ReadToEnd();
reader.Close();
stream.Close(); return content;
} /// <summary>
///general a http request with add header type
/// </summary>
/// <author>Johnny</author>
/// <date>2013/11/26, 17:12:32</date>
public string HeaderRequest(string method, string url, string headerQuery)
{
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = method;
request.Headers.Add(headerQuery);
request.Credentials = CredentialCache.DefaultCredentials;
WebResponse response = request.GetResponse();
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
string content = reader.ReadToEnd();
reader.Close();
stream.Close(); return content;
}
catch (Exception)
{ throw;
}
} /// <summary>
///general a post http request
/// </summary>
/// <author>Johnny</author>
/// <date>2013/11/20, 09:21:33</date>
public string Post(string url, Dictionary<string, string> parameters)
{
return Post(url, DictionaryToString(parameters));
} /// <summary>
///general a post http request
/// </summary>
/// <author>Johnny</author>
/// <date>2013/11/20, 09:21:33</date>
public string Post(string url, string parameters)
{
byte[] postData = System.Text.Encoding.ASCII.GetBytes(parameters); System.Net.ServicePointManager.Expect100Continue = false;
WebRequest request = WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = postData.Length; Stream requestStream = request.GetRequestStream(); requestStream.Write(postData, , postData.Length);
requestStream.Close(); WebResponse response = request.GetResponse();
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
string content = reader.ReadToEnd();
reader.Close();
stream.Close(); return content;
} /// <summary>
///general the result string to dictionary
/// </summary>
/// <author>Johnny</author>
/// <date>2013/11/20, 09:23:25</date>
public string DictionaryToString(Dictionary<string, string> parameters)
{
string queryParameter = "";
foreach (string key in parameters.Keys)
{
if (queryParameter != "") queryParameter = "&";
queryParameter += key + "=" + parameters[key];
} return queryParameter;
} /// <summary>
///general the result dictionary to string
/// </summary>
/// <author>Johnny</author>
/// <date>2013/11/20, 09:23:25</date>
public Dictionary<string, string> StringToDictionary(string queryParameter)
{
Dictionary<string, string> parameters = new Dictionary<string, string>();
foreach (string keyvalue in queryParameter.Split(new char[] { '&' }))
{
string[] values = keyvalue.Split(new char[] { '=' });
parameters.Add(values[], values[]);
} return parameters;
}
更多microsoft api信息请参考:http://msdn.microsoft.com/zh-CN/library/live
c#实现microsoft账号登入授权(OAuth 2.0)并获取个人信息的更多相关文章
- c#实现Google账号登入授权(OAuth 2.0)并获取个人信息
c#实现Google账号登入授权(OAuth 2.0)并获取个人信息 此博主要介绍通过google 账号(gmail)实现登入,授权方式OAuth2.0,下面我们开始介绍. 1.去google官网 ...
- 用户授权 OAuth 2.0
什么是OAuth OAuth是一个关于授权(Authorization)的开放网络标准,目前的版本是2.0版.OAuth适用于各种各样的包括提供用户身份验证机制的应用程序,注意是Authorizati ...
- 夺命雷公狗---微信开发51----网页授权(oauth2.0)获取用户基本信息接口(1)
如果用户在微信客户端访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,从而实现业务逻辑. 一般我们用来“数据采集”,“市场调查”,“投票”,只要授权了第三方网页,微信用户无需注册就可 ...
- 夺命雷公狗---微信开发53----网页授权(oauth2.0)获取用户基本信息接口(3)实现世界留言版
前面两节课我们讲的是base型的授权了,那么现在我们开始Userinfo型授权, 先来看下我们的原理图 我们这节课来做一个 世界留言版 系统 1..首先我还是在微信测试平台那里设置好回调页面的域名 2 ...
- [微信开发] - weixin4j获取网页授权后的code进而获取用户信息
weixin4j封装好的SnsComponent组件中的方法可以执行该步骤 WeixinUserInfoController : package com.baigehuidi.demo.control ...
- 夺命雷公狗---微信开发52----网页授权(oauth2.0)获取用户基本信息接口(2)
我们在上一节课已经发送code给第三方了,那么这就要获取code去换取到用户的openid. 第一步:编写create_baseurl.php(上一节课程已经写完了) 第二步:编写vote1.php( ...
- QQ登入(6)腾讯微博-获取微博用户信息,发送微博
1.1获取weibo用户信息 //先登入授权,可以参考QQ登入(1) Weibo mWeibo = new Weibo(this, mQQAuth.getQQToken()); mWeibo.getW ...
- QQ登入(5)获取空间相册,新建相册,上传图片到空间相册
///////////////////////////////////////////////////////////////////// 获取相册列表:必须先授权登入 1.1. String mA ...
- discuz之同步登入
前言 首先感谢dozer学长吧UCenter翻译成C# 博客地址----------->http://www.dozer.cc/ 其次感谢群友快乐々止境同学的热心指导,虽然萍水相逢但让我 ...
随机推荐
- 1711 Number Sequence(kmp)
Problem Description Given two sequences of numbers : a[1], a[2], ...... , a[N], and b[1], b[2], .... ...
- HDOJ 3037 Saving Beans
如果您有n+1树,文章n+1埋不足一棵树m种子,法国隔C[n+m][m] 大量的组合,以取mod使用Lucas定理: Lucas(n,m,p) = C[n%p][m%p] × Lucas(n/p,m/ ...
- H264 编解码器架构简单
看完后H264/AVC 编解码器演示,头脑是刚刚离开以下三个: 1.H264并且不明白如何指定的编解码器来实现,仅定义了一个编码视频位流的语法.和比特流进行解码,这与MPEG 类似. 2.H264而一 ...
- linux_ubuntu 16.04 更新wifi驱动_无法链接wifi问题
ubuntu kylin ubuntu kylin ubuntu kylin wifi 这个很好解决的,16.04 默认 没有使用wifi驱动设备,默认选择的是:不使用设备1.进入到,软件和更新 -- ...
- Android L下载
Android L千呼万唤最终出来了,那么我们先下载下来一睹为快,那么怎么去拿到最新的L的分支 那依照傻瓜步骤总结下(Linux Ubuntu) 1.获取repo文件 (1).curl https:/ ...
- Android实现“是否退出”对话框和“带图标的列表”对话框
今天我们学习的内容是实现两种对话框(Dialog),第一种是询问是否退出对话框,另外一种是带图标的列表对话框,程序的执行效果是,我们点击button1的时候,弹出第一种对话框,我们点击button2的 ...
- 关于重写ID3 Algorithm Based On MapReduceV1/C++/Streaming的一些心得体会
心血来潮,同时想用C++连连手.面对如火如荼的MP,一阵念头闪过,如果把一些ML领域的玩意整合到MP里面是不是很有意思 确实很有意思,可惜mahout来高深,我也看不懂.干脆自动动手丰衣足食,加上自己 ...
- ASP.NET 依赖注入。
ASP.NET 依赖注入. http://www.it165.net/pro/html/201407/17685.html 我在网上看到了这篇文章,这边文章主要说的方法就是通过读取配置文件来解决依赖注 ...
- js前端分页之jQuery
锋利的js前端分页之jQuery 大家在作分页时,多数是在后台返回一个导航条的html字符串,其实在前端用js也很好实现. 调用pager方法,输入参数,会返回一个导航条的html字符串.方法的内部比 ...
- 利用svn自动同步更新到网站服务器 -- 网摘
首先在服务器上安装VisualSVN Server ,根据提示选好安装的路径,一路确定.安装好后运行VisualSVN Server ,在Repositories上点击右键,选择create New ...