OAuth 2.0 for MVC, Two Legged Implementation
OAuth 2.0 for MVC, Two Legged Implementation
OAuth 1.0 was one complicated beast. The OAuth 2.0 spec greatly simplified things, but that also had the wonderful side effect of rending all of our old OAuth 1.0 code obsolete. They say that "the only thing a pioneer gets is an arrow in the back," I disagree, I say "the thing that only a pioneer gets to have is an adventure."
For example, I got to help write this wonderful, cutting edge, open source, OAuth 2.0 implementation for MVC!
OAuth 2.0 Overview
OAuth is all about tokens. You start by getting a Request Token from the server, and then using that to secure your login information. When you have successfully logged in you will be given a role/permission specific Access Token, you will then submit this token with all of your future requests. You will also get a Refresh Token with your Access Token. Once your Access Token has expired, you can then submit your Refresh Token to get a new pair of Access and Request Tokens.
Two Legged vs Three Legged
A two legged implementation is rather straight forward, you log into the server you are trying to access. A three legged implementation allows you to gain access to a resource by authentication with a third party server. For the time being this project only supports two legged authentication.
Implementation
You must implement four classes to use this library:
- OAuthIdentityBase
- OAuthPrincipalBase
- OAuthProviderBase
- OAuthServiceBase
The first three are very small classes, requiring only a few short lines of code. The Service is the work horse where most of your code will go, but even then it only requires the implementation of four methods.
public abstract class OAuthServiceBase : ProviderBase, IOAuthService { public static IOAuthService Instance { get ; set ; } public abstract OAuthResponse RequestToken(); public abstract OAuthResponse AccessToken( string requestToken, string grantType, string userName, string password, bool persistent); public abstract OAuthResponse RefreshToken( string refreshToken); public abstract bool UnauthorizeToken( string token); } |
Then of course you will need to update your Web.config:
< configuration > < configSections > < section name = "oauth" type = "OAuth2.Mvc.Configuration.OAuthSection, OAuth2.Mvc, Version=1.0.0.0, Culture=neutral" /> </ configSections > < oauth defaultProvider = "DemoProvider" defaultService = "DemoService" > < providers > < add name = "DemoProvider" type = "OAuth2.Demo.OAuth.DemoProvider, OAuth2.Demo" /> </ providers > < services > < add name = "DemoService" type = "OAuth2.Demo.OAuth.DemoService, OAuth2.Demo" /> </ services > </ oauth > < system.web > < httpModules > < add name = "OAuthAuthentication" type = "OAuth2.Mvc.Module.OAuthAuthenticationModule, OAuth2.Mvc, Version=1.0.0.0, Culture=neutral" /> </ httpModules > </ system.web > </ configuration > |
Securing Your Pages
That's the easy part, just add the MVC Authorize Attribute to any actions or controllers that you want to secure.
public class HomeController : Controller { public ActionResult Index() { return View(); } [Authorize] public ActionResult Secure() { return View(); } } |
The Demo Project in Action
1. 2.
3. 4.
The Demo API in Action
- /oauth/requesttoken
- Request Params
- None
- Result
- RequestToken = a028f1895cc548af9de744f63d283f6e
- Expires = 300
- Success = true
- Request Params
- /oauth/accesstoken
- Request Params
- oauth_token = a028f1895cc548af9de744f63d283f6e
- username = tom
- password = c4e5995d4cb8b26970336b956054ac1be9cc50b3
- Result
- AccessToken = 3b23ee5f128a45c88e657ecc74c41bbc
- Expires = 300
- RefreshToken = 85126a53bca940f1ae7c9d797f63a274
- Success = true
- Request Params
- /oauth/refreshtoken
- Request Params
- refreshToken = 85126a53bca940f1ae7c9d797f63a274
- Result
- AccessToken = 8cfc317af6ed45b2b065a8fa5da3ba81
- Expires = 300
- RefreshToken = d0b4a8898d974e939ca83b55cfeabcac
- Success = true
- Request Params
- /oauth/unauthorize
- Request Params
- oauth_token = 8cfc317af6ed45b2b065a8fa5da3ba81
- Result
- Success = true
- Request Params
Additional Resources
Happy authenticating!
~ Tom
OAuth 2.0 for MVC, Two Legged Implementation的更多相关文章
- The OAuth 2.0 Authorization Framework-摘自https://tools.ietf.org/html/rfc6749
Internet Engineering T ...
- OAuth 2.0 Authorization Framework RFC
Internet Engineering Task Force (IETF) D. Hardt, Ed.Request for Comments: 6749 MicrosoftObsoletes: 5 ...
- The OAuth 2.0 Authorization Framework
The OAuth 2.0 Authorization Framework Abstract The OAuth 2.0 authorization framework enables a thi ...
- Spring Security OAuth 2.0
续·前一篇<OAuth 2.0> OAuth 2.0 Provider 实现 在OAuth 2.0中,provider角色事实上是把授权服务和资源服务分开,有时候它们也可能在同一个应用中, ...
- [转]An introduction to OAuth 2.0 using Facebook in ASP.NET Core
本文转自:http://andrewlock.net/an-introduction-to-oauth-2-using-facebook-in-asp-net-core/ This is the ne ...
- 谈谈基于OAuth 2.0的第三方认证 [下篇]
从安全的角度来讲,<中篇>介绍的Implicit类型的Authorization Grant存在这样的两个问题:其一,授权服务器没有对客户端应用进行认证,因为获取Access Token的 ...
- 谈谈基于OAuth 2.0的第三方认证 [中篇]
虽然我们在<上篇>分别讨论了4种预定义的Authorization Grant类型以及它们各自的适用场景的获取Access Token的方式,我想很多之前没有接触过OAuth 2.0的读者 ...
- OAuth 2.0 开发完全详解
--------------------------基础篇------------------------------- I:OAuth 2.0 概述 首先大家来看看国内新浪跟腾讯这两大头对OAuth ...
- IdentityServer4 实现 OpenID Connect 和 OAuth 2.0
关于 OAuth 2.0 的相关内容,点击查看:ASP.NET WebApi OWIN 实现 OAuth 2.0 OpenID 是一个去中心化的网上身份认证系统.对于支持 OpenID 的网站,用户不 ...
随机推荐
- thinkphp这样玩关联查询(实例教会你)
thinkphp实例,内连接实现多表中同时查找,并存在了一个数组中,返回到模板中,模板中volist遍历即可使用多表中的字段 $row=M()->query("select realn ...
- adb 异常报错----adb server is out of date. killing... ADB server didn't ACK * failed to start daemon *
在Eclipse进行android开发的时候,由于要启动adb,但有时候其他的程序启动会占用adb程序的端口,这时候在对android程序进行调试的时候就会出现报错: 究其原因就是因为其他程序占用了a ...
- POJ 2892 Tunnel Warfare (SBT + stack)
题意:给定了初始的状态:有n个村庄连成一条直线,现在有三种操作: 1.摧毁一个村庄 2.询问某个村庄,输出与该村庄相连的村庄数量(包括自己) 3.修复被摧毁的村庄,优先修复最近被摧毁的........ ...
- C# 导出 excel 复杂格式 html导出
/// <summary> /// 夜班津贴统计导出 /// </summary> public void ExportOtStat(string data) { var in ...
- Monthly Expense(二分) 分类: 二分查找 2015-06-06 00:31 10人阅读 评论(0) 收藏
Description Farmer John is an astounding accounting wizard and has realized he might run out of mone ...
- nginx配置方法
nginx配置的代码: user www www; worker_processes 8; error_log /data111/logs/nginx/nginx-error.log crit; pi ...
- getpwent()
http://baike.baidu.com/link?url=XcTB74zhdRLwFaqFIP73u-hSpZgGqYejqnnHGTRfhNF8B7Z2yO4pVwaFaMK24Hkk6nye ...
- java分页数据导出excel
/** * 订单导出(用于统计利润) * @return */ public String orderExport() throws IOException{ if (queryOrderList_c ...
- 任务调度开源框架Quartz动态加入、改动和删除定时任务
Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制.Quartz框架包括了调度器监听.作业和触发器监听.你能够配置作业和触发器监听为全局监听或者是特定于 ...
- uva 10161 Ant on a Chessboard 蛇形矩阵 简单数学题
题目给出如下表的一个矩阵: (红字表示行数或列数) 25 24 23 22 21 5 10 11 12 13 20 9 8 7 14 19 3 2 3 6 15 18 2 1 4 5 16 17 1 ...