Asp.net Api中使用OAuth2.0实现“客户端验证”
一。实现继承自OAuthAuthorizationServerProvider的类,实现以“客户端验证”方式传入的相关认证和access_token发放。
public class MyOwnOAuthProvider:OAuthAuthorizationServerProvider
{ private static readonly Logger logger = LogManager.GetLogger("MyOwnOAuth");
/// <summary>
/// 客户端认证
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
string clientId;
string clientSecret; //获取客户端传入的用户名和密码
context.TryGetFormCredentials(out clientId,out clientSecret); logger.Info("用户名:"+clientId+" 密码:"+clientSecret+" 登陆网站..."); //可以使用自己的数据验证,如通过数据库查询等方式
if (clientId == "MyOwnApp" && clientSecret == "ctmdsh!320")
{
context.Validated(clientId);
} return base.ValidateClientAuthentication(context);
} /// <summary>
/// 方法中对客户端进行授权 授权后发放access token
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public override Task GrantClientCredentials(OAuthGrantClientCredentialsContext context)
{ var oAuthIdentity = new ClaimsIdentity(context.Options.AuthenticationType);
oAuthIdentity.AddClaim(new Claim("MyOwnApp", "ljx"));
//API中可以使用一下方法获取其中的值。
// var identity = (ClaimsIdentity)User.Identity;
//var mayiAccount = identity.FindFirstValue("MyOwnApp");
var ticket = new AuthenticationTicket(oAuthIdentity,new AuthenticationProperties());
context.Validated(ticket); logger.Info("已对用户Ljx发放access_token..."); return base.GrantClientCredentials(context);
}
}
重载ValidateClientAuthentication方法,实现客户端验证,重载GrantClientCredentials方法,实现access_token的发放。 二。通过相关配置,设置自己创建的Provider为Authroize的处理类。
1.在App_start文件夹中找到Startup.Auth,找到OAuthOptions方法,修改对应的Provider完成配置:
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new MyOwnOAuthProvider(),
// AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
//在生产模式下设 AllowInsecureHttp = false
AllowInsecureHttp = true
};
MyOwnOAuthProvider处替换为我们自己创建的验证逻辑类即可。 三。在api中对controller或者action加入[Authorize]属性即可。 四。注意如果要实现跨域访问,需要在Startup.Auth文件的ConfigureAuth方法中加入
app.UseCors(CorsOptions.AllowAll);
当然,需要首先使用Nuget安装Microsoft.Owin.Cors的引用。
五。在客户端实现响应的调用。
1.设置$.ajax的提交之前的处理方法:
$(function () { $.ajaxSetup({
cache: false,
beforeSend: function (xhr, option) { var opentId = "MyOwnApp";
var openSecret = "ctmdsh!320"; // alert("start"); $.ajax({
type: 'post',
async: false,
url: hosturl + "token",
data: {
client_id: opentId,
client_secret: openSecret,
grant_type: "client_credentials"
},
tokenSkip: true,
success: function (data) { xhr.setRequestHeader("Authorization", "Bearer " + data.access_token); } }); } },
complete: function () { },
error: function (a) { if (typeof console.log === "function") { console.log(a.responseText);
} } }); })
client_id指明用户,client_secret指明密码,grant_type: "client_credentials"指明验证方式。 2.在对应页面直接调用响应的API接口即可。
$(function () { $.ajax({
type:"get", url: "http://localhost:51067/api/values", success: function (data) {
alert(data);
}
}); })
Asp.net Api中使用OAuth2.0实现“客户端验证”的更多相关文章
- 在PHP应用中简化OAuth2.0身份验证集成:OAuth 2.0 Client
在PHP应用中简化OAuth2.0身份验证集成:OAuth 2.0 Client 阅读目录 验证代码流程 Refreshing a Token Built-In Providers 这个包能够让你 ...
- 在ASP.NET中实现OAuth2.0(一)之了解OAuth
1.什么是OAuth2.0 是一个开放授权标准,允许用户让第三方应用访问该用户在某一个网站或平台上的私密资源(如照片.视频.联系人等),而无须将用户名和密码提供给第三方应用 2.OAuth2.0授权模 ...
- ASP.NET没有魔法——ASP.NET MVC使用Oauth2.0实现身份验证
随着软件的不断发展,出现了更多的身份验证使用场景,除了典型的服务器与客户端之间的身份验证外还有,如服务与服务之间的(如微服务架构).服务器与多种客户端的(如PC.移动.Web等),甚至还有需要以服务的 ...
- ASP.NET MVC使用Oauth2.0实现身份验证
随着软件的不断发展,出现了更多的身份验证使用场景,除了典型的服务器与客户端之间的身份验证外还有,如服务与服务之间的(如微服务架构).服务器与多种客户端的(如PC.移动.Web等),甚至还有需要以服务的 ...
- Spring Cloud 微服务中搭建 OAuth2.0 认证授权服务
在使用 Spring Cloud 体系来构建微服务的过程中,用户请求是通过网关(ZUUL 或 Spring APIGateway)以 HTTP 协议来传输信息,API 网关将自己注册为 Eureka ...
- IdentityServer4:IdentityServer4+API+Client实践OAuth2.0客户端模式(1)
一.OAuth2.0 1.OAuth2.0概念 OAuth2.0(Open Authorization)是一个开放授权协议:第三方应用不需要接触到用户的账户信息(如用户名密码),通过用户的授权访问用户 ...
- RESTful API架构和oauth2.0认证机制(概念版)
1. 什么是REST REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次出现在2000年Roy Fielding的 ...
- [PHP] 调用微博API 发微博OAuth2.0
在实际测试中出现很多问题, 第一就是按照文档调用ACCESS_TOKEN的时候费老劲啦,因为是编辑线上的,有好多中文空格,没有看出来!整了好久! 第二个就是在调用api发微博的时候出现乱码!必须把发送 ...
- 再说表单验证,在Web Api中使用ModelState进行接口参数验证
写在前面 上篇文章中说到了表单验证的问题,然后尝试了一下用扩展方法实现链式编程,评论区大家讨论的非常激烈也推荐了一些很强大的验证插件.其中一位园友提到了说可以使用MVC的ModelState,因为之前 ...
随机推荐
- Struts2第九篇【OGNL、valueStack详解】
什么是OGNL表达式? OGNL是Object Graphic Navigation Language 是操作对象属性的开源表达式. Struts2框架使用OGNL作为默认的表达式语言. 为什么我们学 ...
- 【SQL】- 基础知识梳理(四) - 存储过程
存储过程的概念 存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行 存储过程的好处 A. 存储过程允许标准组件式编程 ...
- 这家IT教育公司太拼了:毕业生找不到工作就全额退学费!
乐橙谷为了让更多的学生有工作,有高薪工作,已经决定尝试一种更刺激的游戏规则:完成课时的学员如果毕业找不到工作,公司将全额退还学费.这家公司秉承着自己的使命:以尊重的文化,敬畏的心态去努力帮助每个学生实 ...
- oracle 表查询(二)
1.使用逻辑操作符号问题:查询工资高于500或者是岗位为manager的雇员,同时还要满足他们的姓名首字母为大写的J?select * from emp where (sal > 500 or ...
- Spring MVC中Filter Servlet Interceptor 执行顺序
<servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springfr ...
- Swiper.js使用方法
<!DOCTYPE html> <html> <head> ... <link rel="stylesheet" href=" ...
- hadoop 基本命令
hdfs相关 1.查看HDFS文件目录 hadoop fs -ls / mapreduce相关 1.查看mapred job mapred job -list hadoop job -list Use ...
- #翻译#原文来自Database.System.Concepts(6th.Edition.2010)2.6Relational Operations,原文作者Abraham Silberschaz , Henry F. Korth , S. Sudarshan
2.6关系操作 所有的过程关系查询语言都提供一组操作,这些操作可以应用于单个关系或一对关系.这些操作具有良好的和期望的属性,它们的结果总是一个单一的关系.这个属性允许一个以模块化的方式组合其中的几个操 ...
- NSString与NSMutableString的浅拷贝与深拷贝
浅拷贝:指针拷贝,指针与原指针地址相同,没有创建新的对象. 深拷贝:内容拷贝,创建了新的对象,指针地址与原对象的指针地址不同. NSString测试代码如下 打印结果如下(后面打印出的两个NSCFCo ...
- HDU1081 最大字段和 压缩数组
最大字段和题型,推荐做题顺序: HDU1003 HDU1024 HDU1081 zoj2975 zoj2067 #include<cstdio> #include< ...