OAuth2 .net MVC实现获取token
OAuth2 的原理这里不多讲,可以看:https://www.cnblogs.com/icebutterfly/p/8066548.html
直奔主题:这里要实现的功能为,统计微软的Owin程序集实现本地获取token,完成token工作。
上代码:
第一步:配置Startup.Auth.cs
public partial class Startup
{ public void ConfigureAuth(IAppBuilder app)
{
app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/oauth2/token"),//设置获取token地址
Provider = new MyOAuthAuthorizationServerProvider(),//自定义token验证
AccessTokenExpireTimeSpan = TimeSpan.FromSeconds()//定义token过期时间
}); //下面必须加用bearer方式
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()
{
});
}
}
第二步:继承OAuthAuthorizationServerProvider接口,重新里面的严重方法。我只实现通过用户名密码获取token,所以只重写两个方法即可
public class MyOAuthAuthorizationServerProvider : OAuthAuthorizationServerProvider
{
public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
string clientId;
string clientSecret;
if (!context.TryGetBasicCredentials(out clientId, out clientSecret))
{
context.TryGetFormCredentials(out clientId, out clientSecret);
} if (context.ClientId == null)
{
context.SetError("invalid_clientId", "client_Id is not set");
return Task.FromResult<object>(null);
}
if (!string.IsNullOrEmpty(clientSecret))
{
context.OwinContext.Set("clientSecret", clientSecret);
}
var client = ClientRepository.Clients.Where(c => c.Id == clientId).FirstOrDefault();
if (client != null)
{
context.Validated();
}
else
{
context.SetError("invalid_clientId", string.Format("Invalid client_id '{0}'", context.ClientId));
return Task.FromResult<object>(null);
}
return Task.FromResult<object>(null);
} public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
//这里写验证代码
if (context.UserName=="admin"&&context.Password=="")
{
var identity = new ClaimsIdentity(
new GenericIdentity(context.UserName,
OAuthDefaults.AuthenticationType),
context.Scope.Select(x => new Claim("urn:oauth:scope", x)));
context.Validated(identity);
}
else
{
context.SetError("invalid_grant", "The user name or password is incorrect");
return Task.FromResult<object>(null);
}
return Task.FromResult();
}
}
第三步:定义Client实体
public class Client
{
public string Id { get; set; }
} public class ClientRepository
{
public static List<Client> Clients = new List<Client>() {
new Client{
Id = "test1"
},
new Client{
Id = "test2",
}
};
}
第四步:编写测试方法
public class HomeController : Controller
{ [Authorize]//授权标签
public ActionResult Test()
{
//获取到授权登陆用户
var authentication = HttpContext.GetOwinContext().Authentication;
string name= authentication.User.Identity.Name; return Json(new { Message="Hello world",name= name });
} }
OK,就这么简单完成。
现在来测试:
第一步:获取token,我用的POSTMan。成功获取到token

第二步:用postman测试也行,这里贴出用ajax请求的结果
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<meta charset="utf-8" />
<script src="Scripts/jquery-1.10.2.js"></script>
<script>
function ajax() {
$.ajax({
url: '/home/test',
type: 'POST',
contentType: 'application/x-www-form-urlencoded',
headers: {
'Authorization': 'Bearer ' + $('#token').val(),
},
data: {},
success: function (data) {
console.log(data);
},
})
}
</script>
</head>
<body>
<input type="text" id="token" />
<input type="button" value="提交" onclick="ajax()" />
</body>
</html>
测试结果为:
{
"Message": "Hello world",
"name": "admin"
}
OAuth2 .net MVC实现获取token的更多相关文章
- Spring Security 实战干货:OAuth2登录获取Token的核心逻辑
1. 前言 在上一篇Spring Security 实战干货:OAuth2授权回调的核心认证流程中,我们讲了当第三方同意授权后会调用redirectUri发送回执给我们的服务器.我们的服务器拿到一个中 ...
- spring oauth2获取token时WARN:Could not decode JSON for additional information: BaseClientDetails解决办法
错误描述 简述:oauth_client_details表中additional_information字段默认为null,ClientDetails实体类中类型为Map<String,Obje ...
- 新浪微博登陆,获取token
用WeiboAuthListener获取code 用下面的代码获取token..半成品的sdk真让人捉急. String code = values.getString("code" ...
- ASP.NET WebApi OWIN 实现 OAuth 2.0(自定义获取 Token)
相关文章:ASP.NET WebApi OWIN 实现 OAuth 2.0 之前的项目实现,Token 放在请求头的 Headers 里面,类似于这样: Accept: application/jso ...
- MVC 统一验证Token demo
/// <summary> /// 获取token /// </summary> /// <param name="staffId"></ ...
- spring security oauth2搭建resource-server demo及token改造成JWT令牌
我们在上文讲了如何在spring security的环境中搭建基于oauth2协议的认证中心demo:https://www.cnblogs.com/process-h/p/15688971.html ...
- nodejs向远程服务器发送post请求----融云Web SDK/客户端获取token
最近要用到一个叫融云的及时通讯的SDK,在获取token这个步骤的时候有点卡顿,以防以后碰到类似的问题,再此记录一下. 客户端通过融云 SDK 每次连接服务器时,都需要向服务器提供 Token,以便验 ...
- MVC控制器获取@Html.DropDownList值
MVC控制器获取@Html.DropDownList值 发表于 2014 年 4 月 1 日 作者 efour — 暂无评论 先贴一段代码,演示@Html.DropDownList的使用. 前台 前台 ...
- 获取token,绑定微信号,自定义菜单,事件响应demo
摘要: 这个demo包含了获取token,绑定微信号,设置自定义菜单,响应文本和事件 这个教程的基础篇和提升篇都看完了,总感觉有点隔靴挠痒的感觉,讲的东西我都懂,没有吸收多少新鲜的知识.貌似还没有我这 ...
随机推荐
- [GO]结构体成员的使用:普通变量
package main import "fmt" func main() { type student struct { id int name string sex byte ...
- IO编程之writelines方法
1.使用with open as 函数写入文件 2.创建后的文件名为database.txt 3.创建一个函数进行读取文件,使用for循环遍历整个文件内容 4.使用if __name__=='__ma ...
- Android开发之Tween(补间动画)
在android中动画主要有三种,①帧动画(http://blog.csdn.net/dmk877/article/details/45893017)这篇文章已经详细的进行了讲解,②补间动画这也是这篇 ...
- mysql 数据库查询
myspl 三部分 文件 服务 界面 查看数据库命令 show databases 创建数据库 create database 库名 删除数据库 drop database ...
- idea中java文件打包出去步骤
打包出去之后 通过xftp放在Linus上面去运行 然后用hadoop fs -put 放到hadoop集群上面(而且此时在/user/hadoop下面创建好input文件夹和一个输入的文件) 即 ...
- JavaScript - this详解 (三)
闭包 this 执行上下文决定了变量作用域 而闭包,它其实是一种决策,是一种模式,让我们可以灵活的改变变量作用域. 按惯例,上栗子 var global = 'global';function out ...
- 2014-3tomcat遇到的问题汇总
tomcat启动不起来 端口占用:加了apache的ajp,所以要打开ajp_port,结果被占用了. 权限不够:chown:各个文件的权限都不够,特别是日志文件的. 配置问题:应用 servlet- ...
- TSQL--约束基础和Demo
--============================================================ SQL SERVER 中使用constraint和role来对数据进行限制 ...
- sp_helptext输出错行问题解决
相信,大家对sp_helptext存储过程一定不陌生,它可以帮你快速获取存储过程等对象的定义.但它有一个致命的缺点就是:每行最多返回255个nvarchar类型的字符,假如有一个编写不规范的存储过程, ...
- 8 个用于生产环境的 SQL 查询优化调整
在没有数据仓库或单独的分析数据库的组织中,报告的唯一来源和最新的数据可能是在现场生产数据库中. 在查询生产数据库时,优化是关键.一个低效的查询可能会对生产数据库产生大量的资源消耗,如果查询有错误会引发 ...