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/ 其次感谢群友快乐々止境同学的热心指导,虽然萍水相逢但让我 ...
随机推荐
- View中选择的数据行中的部分数据传入到Controller中
将View中选择的数据行中的部分数据传入到Controller中 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NE ...
- "错: void 值不被忽略,因为预期"解决
在C陷阱与缺陷,实现assert什么时候,在这个过程很聪明,化为一个表达式,在当条件为假时就会调用_assert_error报错并终止程序. 刚開始_assert_error 的返回值类型是 void ...
- GG同步sqlserver报错一个案例 Invalid date format
在里面Oracle表同步sqlserver时间,在sqlserver当应用程序数据的结束.您可能会遇到这个错误. 2014-05-17 17:20:24 WARNING OGG-01154 SQL e ...
- [MySQL]-->查询5天之内过生日的同事中的闰年2月29日问题的解决过程
前言: 上次写了查询5天之内过生日的同事中的跨年问题的解决过程,网址为:http://blog.csdn.net/mchdba/article/details/38952033 ,当中漏了一个闰年2月 ...
- javascript实现数据结构:广义表
原文:javascript实现数据结构:广义表 广义表是线性表的推广.广泛用于人工智能的表处理语言Lisp,把广义表作为基本的数据结构. 广义表一般记作: LS = (a1, a2, ..., an ...
- android 编译共享ccache的缓存
1. android自带的ccache版本号(2.4版本号)过低,是无法支持以上的功能的,须要使用新版ccache. 2. 最新的ccache请到http://ccache.samba.org/dow ...
- 【百度地图API】百度API卫星图使用方法和卫星图对比工具
原文:[百度地图API]百度API卫星图使用方法和卫星图对比工具 百度地图API推出卫星图接口也有一个月啦~ 本文除了介绍如何使用百度地图API来操作卫星图外,还顺带制作了个卫星图对比工具. 一.百度 ...
- Largest Rectangular Area in a Histogram
题目地址:https://oj.leetcode.com/problems/largest-rectangle-in-histogram/ ,刚開始事实上没做这个题,而是在做https://oj.le ...
- Linq技术四:动态Linq技术 -- Linq.Expressions
前面介绍了Linq的三个方面应用:Linq to SQL, Linq to XML和Linq to Object,这篇介绍一下动态Linq的实现方式及应用场景. 命名空间: System.Linq; ...
- Objective-c中的单例
单例是指静态分配的实例,就是只开辟一块内存,不会重新开辟内存,而 iphone sdk 中全是这种实例,例如[UIApplication sharedApplication] 返回一个指向代表应用程序 ...