本篇文章实现了四种认证方式中的客户端模式和密码模式,未实现token持久化

未介绍OAuth2的相关概念,全部是干货,可自己在网上搜索OAuth2相关知识,在这不做过多阐述

  • 一、引用OAuth2所需的dll,使用nuget下载以下依赖项

Microsoft.AspNet.WebApi.Owin
       Microsoft.Owin.Host.SystemWeb
       Microsoft.Owin.Security.OAuth
       Microsoft.AspNet.Identity.Owin

  • 二、重载OAuth2相应的验证方法
 public class OAuthServerProvider : OAuthAuthorizationServerProvider
{
/// <summary>
/// 验证OAuth请求
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
string clientId;
string clientSecret; //获取客户端凭证
if (!context.TryGetBasicCredentials(out clientId, out clientSecret))
context.TryGetFormCredentials(out clientId, out clientSecret); //保存客户端凭证
context.OwinContext.Set<string>("clientId", clientId);
context.OwinContext.Set<string>("clientSecret", clientSecret);
//验证通过
context.Validated(clientId); return base.ValidateClientAuthentication(context);
} /// <summary>
/// 客户端模式 验证
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public override Task GrantClientCredentials(OAuthGrantClientCredentialsContext context)
{
var clientSecret = context.OwinContext.Get<string>("clientSecret");
if (context.ClientId == "admin" && clientSecret == "")
{
var oAuthIdentity = new ClaimsIdentity(context.Options.AuthenticationType);
oAuthIdentity.AddClaim(new Claim(ClaimTypes.Name, "Clear App"));
var ticket = new AuthenticationTicket(oAuthIdentity, new AuthenticationProperties());
context.Validated(ticket);
}
else
{
context.SetError("invalid_grant", "The username or password is incorrect.");
}
return base.GrantClientCredentials(context);
} /// <summary>
/// 密码模式验证
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
if (context.UserName == "admin" && context.Password == "")
{
var oAuthIdentity = new ClaimsIdentity(context.Options.AuthenticationType);
oAuthIdentity.AddClaim(new Claim(ClaimTypes.Name, context.UserName));
var ticket = new AuthenticationTicket(oAuthIdentity, new AuthenticationProperties());
//替换上下文中票证信息,并将其标记为已验证
context.Validated(ticket);
}
else
{
context.SetError("invalid_grant", "The username or password is incorrect.");
}
return base.GrantResourceOwnerCredentials(context);
} }

重写OAuth验证方法

  • 三、添加Startup类
  public class Startup
{
public void Configuration(IAppBuilder app)
{
var options = new OAuthAuthorizationServerOptions()
{
TokenEndpointPath = new PathString("/oauth2/token"),//获取token访问路径
Provider = new OAuthServerProvider(),//oauth2服务配置
AccessTokenExpireTimeSpan = TimeSpan.FromDays(),//token有效期
AllowInsecureHttp = true
};
app.UseOAuthBearerTokens(options);
}
}

Startup配置OAuth2服务

  • 四、验证OAuth请求

密码模式

客户端模式

最新文章

  1. Windows下部署Appium教程(Android App自动化测试框架搭建)
  2. 关于Java中null的十点详解
  3. WinForm------TreeListLookUpEdit控件的使用
  4. javascript里for循环的一些事情
  5. poj 1731 Orders
  6. 【转】Android 服务器之SFTP服务器上传下载功能
  7. 【转】shell 教程——02 几种常见的Shell
  8. Oracle 取上周一到周末日期的查询语句
  9. WebStorm主题设置
  10. 开涛spring3(6.9) - AOP 之 6.9 代理机制
  11. 在CentOS6上编译安装实现LAMP(php-modules)+phpMyAdmin安装过程全记录
  12. 【The Time Traveller&#39;s Wife】
  13. nginx+tomcat:动静分离+https
  14. 一、Git简介
  15. 现在企业开发时,Java所用到的主流框架有哪些?
  16. Python中的Numpy入门教程
  17. Java 构造器 遇到多个构造器时要考虑用构建器
  18. JVM参数以及用法
  19. [10]Windows内核情景分析---中断处理
  20. idea安装下载

热门文章

  1. ios下,微信小程序scrollview组件中的fixed元素抖得和帕金森病人一样
  2. 终极版Servlet——我只能提示您路过别错过
  3. java中dao层和service层的区别是什么
  4. 【Android Studio】提示代码忽略大小写
  5. tensorflow学习笔记——常见概念的整理
  6. 从动态代理到Spring AOP(中)
  7. go杂货铺
  8. Unity实现放大缩小以及相机位置平移实现拖拽效果
  9. SpringBoot:如何优雅地处理全局异常?
  10. 【Kubernetes 系列二】从虚拟机讲到 Kubernetes 架构