本博主要介绍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)并获取个人信息的更多相关文章

  1. c#实现Google账号登入授权(OAuth 2.0)并获取个人信息

    c#实现Google账号登入授权(OAuth 2.0)并获取个人信息   此博主要介绍通过google 账号(gmail)实现登入,授权方式OAuth2.0,下面我们开始介绍. 1.去google官网 ...

  2. 用户授权 OAuth 2.0

    什么是OAuth OAuth是一个关于授权(Authorization)的开放网络标准,目前的版本是2.0版.OAuth适用于各种各样的包括提供用户身份验证机制的应用程序,注意是Authorizati ...

  3. 夺命雷公狗---微信开发51----网页授权(oauth2.0)获取用户基本信息接口(1)

    如果用户在微信客户端访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,从而实现业务逻辑. 一般我们用来“数据采集”,“市场调查”,“投票”,只要授权了第三方网页,微信用户无需注册就可 ...

  4. 夺命雷公狗---微信开发53----网页授权(oauth2.0)获取用户基本信息接口(3)实现世界留言版

    前面两节课我们讲的是base型的授权了,那么现在我们开始Userinfo型授权, 先来看下我们的原理图 我们这节课来做一个 世界留言版 系统 1..首先我还是在微信测试平台那里设置好回调页面的域名 2 ...

  5. [微信开发] - weixin4j获取网页授权后的code进而获取用户信息

    weixin4j封装好的SnsComponent组件中的方法可以执行该步骤 WeixinUserInfoController : package com.baigehuidi.demo.control ...

  6. 夺命雷公狗---微信开发52----网页授权(oauth2.0)获取用户基本信息接口(2)

    我们在上一节课已经发送code给第三方了,那么这就要获取code去换取到用户的openid. 第一步:编写create_baseurl.php(上一节课程已经写完了) 第二步:编写vote1.php( ...

  7. QQ登入(6)腾讯微博-获取微博用户信息,发送微博

    1.1获取weibo用户信息 //先登入授权,可以参考QQ登入(1) Weibo mWeibo = new Weibo(this, mQQAuth.getQQToken()); mWeibo.getW ...

  8. QQ登入(5)获取空间相册,新建相册,上传图片到空间相册

    ///////////////////////////////////////////////////////////////////// 获取相册列表:必须先授权登入 1.1.  String mA ...

  9. discuz之同步登入

    前言   首先感谢dozer学长吧UCenter翻译成C# 博客地址----------->http://www.dozer.cc/   其次感谢群友快乐々止境同学的热心指导,虽然萍水相逢但让我 ...

随机推荐

  1. 初识Java——(Java学习笔记一)

    冯诺依曼体系结构   JAVA核心优势:跨平台---通过JVM(java虚拟机)来实现   JVM:Java虚拟机的一种规范     标示符:只能以下划线.美元符号($).字母.数字组成,不能以数字开 ...

  2. JavaScript编写了一个计时器

    初学JavaScript,用JavaScript编写了一个计时器. 设计思想: 1.借助于Date()对象,来不断获取时间点: 2.然后用两次时间点的毫秒数相减,算出时间差: 3.累加时间差,这样就能 ...

  3. .Net 4.5中的HttpClient试用

    .Net 4.5中增加了一个新的System.Net.Http.HttpClient名字空间(在 System.Net.Http.dll 中),用于发送 HTTP 请求和接收 HTTP 响应. 基本操 ...

  4. HTML5分析实战Web存储机制(Web Storage)

    Web Storage它是Key-Value在持久性数据存储的形式.Web Storage为了克服cookie把所引起的一些限制.当数据需要严格格控制client准时,没有必要不断地发回数据serve ...

  5. linux_根据关键词_路径下递归查找code

    1:进入想查找的项目根目录 2:根据关键词查找 find . -name "*" |xargs grep -F '10.26'

  6. node.js高效操作mongodb

    node.js高效操作mongodb Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为Jav ...

  7. Codeforces 461B Appleman and Tree(木dp)

    题目链接:Codeforces 461B Appleman and Tree 题目大意:一棵树,以0节点为根节点,给定每一个节点的父亲节点,以及每一个点的颜色(0表示白色,1表示黑色),切断这棵树的k ...

  8. C#中实现WebBrowser控件的HTML源代码读写

    原文:C#中实现WebBrowser控件的HTML源代码读写 C#中实现WebBrowser控件的HTML源代码读写http://www.blogcn.com/user8/flier_lu/index ...

  9. 剑指XX(游戏10) - 走正步工厂一个安静的农场游戏的代码

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2lsYW5ncXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...

  10. CentOS 使用yum命令安装Java SDK(openjdk)

    CentOS 6.X 和 5.X 自带有OpenJDK runtime environment  (openjdk).它是一个在linux上实现开源的java 平台.CentOS  yum 命令 安装 ...