LoginController中:

第三方登陆

        public ActionResult LogOn()
{
string liveUrl =
string.Format(
"https://login.live.com/oauth20_authorize.srf?client_id={0}&scope=wl.Emails&response_type=code&redirect_uri={1}&locale={2}",
this.ClientId,
this.OAuthLogOnCallbackUrl,
this.Locale); return this.Redirect(liveUrl);
}

登陆成功,获取授权 

        public async Task<ActionResult> LogOnCallback()
{
string code = this.Request.QueryString["code"]; if (string.IsNullOrEmpty(code))
return RedirectToAction("Index", "Login"); string tokenUrl =
string.Format(
"https://login.live.com/oauth20_token.srf?client_id={0}&redirect_uri={1}&client_secret={2}&code={3}&grant_type=authorization_code&locale={4}",
this.ClientId,
this.OAuthLogOnCallbackUrl,
this.ClientSecret,
code,
this.Locale); string liveId = string.Empty;
try
{
liveId = await RequestLiveIdByToken(await RequestToken(tokenUrl));
}
catch (Exception e)
{
_logger.Fatal("无法获取LiveId Token", e);
var result = new ViewModels.LoginResult
{
Success = false,
ErrorMessage = "无法连接登录服务,请稍后再试。"
};
return View("Index", result);
} if (!string.IsNullOrEmpty(liveId))
{
var userSvc = _userSvc;
if (userSvc.CurrentUser == null)
{
UserInfo user = userSvc.GetUserByEmail(liveId); if (user != null && user.IsEnable)
{
return this.DoLogin(user);
}
else
{
var result = new ViewModels.LoginResult
{
Success = false
}; if (user != null && !user.IsEnable)
{
result.ErrorMessage = "用户被禁止登录!";
}
else
{
result.ErrorMessage = "用户不存在!";
} return View("Index", result);
}
} return this.DoLogin(userSvc.CurrentUser);
} return this.RedirectToAction("Index", "Login");
}
        [NonAction]
private async Task<string> RequestToken(string url)
{
var request = WebRequest.Create(url); using (var response = await request.GetResponseAsync())
{
using (var sr = new StreamReader(response.GetResponseStream()))
{
var json = sr.ReadToEnd();
return JsonConvert.DeserializeAnonymousType(json, new { access_token = "" }).access_token;
}
}
} [NonAction]
private async Task<string> RequestLiveIdByToken(string token)
{
if (string.IsNullOrEmpty(token))
return string.Empty; var request = WebRequest.Create(string.Format("https://apis.live.net/v5.0/me?access_token={0}", token));
using (var response = await request.GetResponseAsync())
{
using (var sr = new StreamReader(response.GetResponseStream()))
{
string json = sr.ReadToEnd();
var userJson = JsonConvert.DeserializeAnonymousType(json, new { emails = new { account = "" } });
return userJson.emails.account;
}
}
}

注销登陆 

        public ActionResult LogOff()
{
this.PreLogout();
string liveUrl =
string.Format(
"https://login.live.com/oauth20_logout.srf?client_id={0}&scope=wl.Emails&response_type=code&redirect_uri={1}&locale={2}",
this.ClientId,
this.OAuthLogOnCallbackUrl,
this.Locale); return this.Redirect(liveUrl);
}

  

OAuth的MVC实现(微软)的更多相关文章

  1. .net mvc结合微软提供的FormsAuthenticationTicket登陆

    一.Web.config <system.web> <compilation debug="true" targetFramework="4.5&quo ...

  2. [译]MVC网站教程(一):多语言网站框架

    本文简介 本博文介绍了 Visual Studio 工具生成的 ASP.NET MVC3 站点的基本框架:怎样实现网站的语言的国际化与本地化功能,从零开始实现用户身份认证机制,从零开始实现用户注册机制 ...

  3. [译]WebForms vs. MVC

    译者介绍 小小.NET学童,滴答…滴答…的雨…… 正文如下======================================================= 原文示例(VS2012): 1 ...

  4. ASP.Net MVC开发基础学习笔记:二、HtmlHelper与扩展方法

    一.一个功能强大的页面开发辅助类—HtmlHelper初步了解 1.1 有失必有得 在ASP.Net MVC中微软并没有提供类似服务器端控件那种开发方式,毕竟微软的MVC就是传统的请求处理响应的回归. ...

  5. WebForms VS. MVC(翻译)

    (本文翻译自CodeProject上阿三写的一篇文章,原文地址:http://www.codeproject.com/Articles/528117/WebForms-vs-MVC,讲了有关ASP.A ...

  6. 使用 WPF+ ASP.NET MVC 开发 在线客服系统 (一)

    近段时间利用业余时间开发了一套在线客服系统,期间遇到过大大小小不少问题,好在都一一解决,最终效果也还可以,打算写一个系列的文章把开发过程详细的记录下来. 希望能够和更多的开发人员互相交流学习,也希望有 ...

  7. 6、ASP.NET MVC入门到精通——ASP.Net的两种开发方式

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 目前,ASP.NET中两种主流的开发方式是:ASP.NET Webform和ASP.NET MVC.从下图可以看到ASP.NET WebFo ...

  8. ASP.NET MVC 简介

    1. ASP.NET MVC 是什么? ASP.NET MVC是微软官方提供的以MVC模式为基础的ASP.NET Web应用程序(Web Application)框架,它由Castle的MonoRai ...

  9. ASP.Net MVC开发基础学习笔记(2):HtmlHelper与扩展方法

    一.一个功能强大的页面开发辅助类—HtmlHelper初步了解 1.1 有失必有得 在ASP.Net MVC中微软并没有提供类似服务器端控件那种开发方式,毕竟微软的MVC就是传统的请求处理响应的回归. ...

随机推荐

  1. 缓存 Memached

    https://github.com/enyim/EnyimMemcached http://www.newasp.net/soft/63735.html#downloaded/ http://blo ...

  2. 取n到m行

    取n到m行 . select top m * from tablename where id not in (select top n id from tablename order by id as ...

  3. 20165305 Linux安装及学习

    一.虚拟机的安装 在根据老师所给的<基于VirtualBox虚拟机安装Ubuntu图文教程>的时候,我发现虚拟化处于被禁用状态,于是我在网上查找了一下解决办法,在我将bios中虚拟化设置为 ...

  4. 设计模式之Strategy(策略)(转)

    Strategy是属于设计模式中 对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单独的类. Stratrgy应用比较广泛,比如, 公司经营业务变化图, 可能有两种实现方式,一个是线条曲 ...

  5. Google Analytics for Firebase 是一款免费的应用评估解决方案,可提供关于应用使用和用户互动情况的数据分析

    Google Analytics for Firebase Google Analytics for Firebase 是一款免费的应用评估解决方案,可提供关于应用使用和用户互动情况的数据分析.Fir ...

  6. JS 测试网络速度与网络延迟

    一.延迟与网速 通过js加载一张1x1的极小图片,测试出图片加载的所用的时长.如果换一个几百KB的图片,则可心用来计算下载网速 document.write('<input type=" ...

  7. python docopt模块详解

    python docopt模块详解 docopt 本质上是在 Python 中引入了一种针对命令行参数的形式语言,在代码的最开头使用 """ ""&q ...

  8. Inception 模型

    https://blog.csdn.net/xxiaozr/article/details/71481356 inception v1: 去除了最后的全连接层,使用全局平均池化层来代替,因为全连接层的 ...

  9. org.springframework.beans.factory.BeanCreationException,Invocation of init method failed,Context initialization failed

    G:\javaanzhuang\apache-tomcat-\bin\catalina.bat run [-- ::,] Artifact ssm_qingmu02_web:war exploded: ...

  10. K8S学习笔记之修改K8S的api-server证书

    K8S的api-server证书包含很多IP和域名,有时候后期才发现证书内有错误,需要重新生成该证书. 修改server-csr.json,修改后基于原来的ca证书重新生成server.perm  s ...