前期搭建可看这篇博文:https://www.cnblogs.com/lnice/p/6857203.html,此博文是在本篇博文实践才产生的,在实践中,也产生了几个问题,希望能够共同交流,一起进步。

在此次测试,我们分为前后端:后端 :WebAPI

前段  Jquery

主要是测试,对于前段框架,我也不怎么熟悉,比如VUE,这些类似风格的  ,我熟悉知识 Boostrap  这种简单样式框架,不得不说,这是我的悲哀

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace WebAPI5.Models
{
/// <summary>
/// 用户信息类
/// </summary>
public class UserInfo
{
/// <summary>
/// ID
/// </summary>
public int id { get; set; }
/// <summary>
/// 用户姓名
/// </summary>
public string UserName { get; set; }
/// <summary>
/// 用户密码
/// </summary>
public string UserPwd { get; set; }
/// <summary>
/// 性别 0 是女 1 是男
/// </summary>
public int UserSex { get; set; } }
}
 using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using WebAPI5.Models; namespace WebAPI5.Controllers
{
[Authorize]
public class BlogController : ApiController
{
//查询所有员工
[HttpGet]
public IHttpActionResult GetAll()
{
List<UserInfo> uf = new List<UserInfo>() {
new UserInfo { id=, UserName="陈粒", UserPwd="weeweewwee", UserSex=},
new UserInfo { id=, UserName="小半", UserPwd="qdaqwdqqd", UserSex=},
new UserInfo { id=, UserName="Grain", UserPwd="dasad", UserSex=},
new UserInfo { id=, UserName="Cgrain", UserPwd="weeadadweewwee", UserSex=}
};
return Json(uf);
}
}
}

Controllers

   public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{ context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" }); string usepwd = context.Password;
string usename = context.UserName;
////判断是否有这个账号,有才能访问
if (usename.Contains("C")&& usepwd.Contains("C"))
{
context.SetError("invalid_grant", "The username or password is incorrect");
return;
}
var identity = new ClaimsIdentity(context.Options.AuthenticationType);
identity.AddClaim(new Claim("sub", context.UserName));
context.Validated(identity); }

SimpleAuthorizationServerProvider

 <!DOCTYPE html>
<html lang="en"> <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta charset="utf-8" />
<title>你的 ASP.NET 应用程序</title>
<script src="jquery-1.10.2.min.js"></script>
</head> <body>
<input type="text" id="username" />
<input type="text" id="pwd" />
<input type="button" onclick="add()" value="Come On" />
<input type="button" onclick="showdata()" value="显示data" />
<input type="button" onclick="reftoken()" value="刷新token" /> <div>
<ul id="My_ul"></ul>
</div>
<script>
var token;
var refresh_token;
function add() {
$.ajax({
url: "http://localhost:1985/token",
dataType: "Json",
method: "POST",
data: {
"grant_type": "password",
"UserName": $("#username").val(),
"Password": $("#pwd").val() },
success: function (data) {
console.log(data);
token = data["access_token"];
refresh_token = data["refresh_token"];
console.log(refresh_token);
$.ajax({
url: "http://localhost:1985/api/Blog/GetAll",
dataType: "Json",
method: "GET",
headers: {
"Authorization": "Bearer " + token //把登录获取的Token加入到http请求头中
},
success: function (data) { console.log(data);
},
error: function (error) {
alert(error["message"]); } });
},
error: function (error) { alert(error["responseJSON"]["error_description"]);
//console.log(error);
// alert(error["error_description"]);
} }); };
function showdata() {
$.ajax({
url: "http://localhost:1985/api/Blog/GetAll",
dataType: "Json",
method: "GET",
headers: {
"Authorization": "Bearer " + token //把登录获取的Token加入到http请求头中
},
success: function (data) {
var html = "";
for (index = 0; index < data.length; index++) {
html += "<li> " + data[index]["UserName"] + " </li>"; }
$("#My_ul").append(html)
console.log(data);
},
complete: function (xhr, ts) { // console.log();
// console.log
// (ts);
if (xhr.status== 401 ) {
reftoken();
showdata();
}
}
// },
// error: function (error) {
// alert(error["responseJSON"]["message"]); // } }); } function reftoken() {
$.ajax({
url: "http://localhost:1985/token",
dataType:"Json",
type:"POST",
data: {
"grant_type": "refresh_token",
"refresh_token": refresh_token
},
success: function (data) {
console.log(data)
token=data["access_token"];
refresh_token=data["refresh_token"]; },
error: function (error) {
console.log(error);
} }); }
</script>
</body> </html>

Html

为了便于观察 ,我expires_in 设置一分钟

这里报错是因为我们的token 已经过期,为了不影响用户操作,我们刷新了token,在重新请求了数据

随后我又点击了显示数据按钮

显示了两次:

为了便于观察,我们修改已经ajax

showdata 方法,我们注释掉token过期重新获取的方法调用

点击请求都没有了数据

我们刷新token

我们突然发现,刚刚获取的token过期(其实没过期的)

ajax 请求,每次都会进入这个方法,所以才会有我们的  if 判断  ,只有当请求是401 的时候(这里可以再详细一点,指出错误请求的类型或者原因,更精确的判断)

好了,这里就是简单的介绍了,当时这样,我也发现了几个问题:

第一个问题: 尽管我们用到了api的授权,可是,如何防止他大规模的数据调用。

第二个问题:前后端分离的项目,或者说未分离的项目,肯定不是这样调用的,这样子,我总根据不安全(只能把一些技术在我之下的大佬给拦截,技术在我之上的大佬,估计看到这篇文件就在呵呵了,心想:要是每个api都这样,我就不难了 o(╥﹏╥)o),好了,这个问题就是:如何标准化?没用到vue  前段只是简单的使用 boostrap +ajax (自我感觉这个问题也问到了也许有部分人的心声,并不是每个人做的项目都比较超强,其实还有许多大佬们,许多普通人,做的项目都比较普通,还有很多人还在苦海中挣扎,比如我),如何更安全的使用标准化?

第三个问题:自定义修改他的返回:比如说:

如何修改呀??

第四个问题:  我们返回给前段的token ,需要加密不?

觉得好就点个关注点个赞,留下你的思路或者说改进点哦  ☺ 还可以留下大佬有话的代码

WebApi增加Oauth2认证的更多相关文章

  1. WebApi使用OAuth2认证

    本篇文章实现了四种认证方式中的客户端模式和密码模式,未实现token持久化 未介绍OAuth2的相关概念,全部是干货,可自己在网上搜索OAuth2相关知识,在这不做过多阐述 一.引用OAuth2所需的 ...

  2. ASP.NET WebApi 基于OAuth2.0实现Token签名认证

    一.课程介绍 明人不说暗话,跟着阿笨一起玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将是我们需要思考的问题.为了保护我们的WebApi数 ...

  3. 轻松搭建CAS 5.x系列(6)-在CAS Server上增加OAuth2.0协议

    概述说明 CAS Server默认搭建出来,客户端程序只能按照CAS自身的协议接入.CAS的强大在于,有官方的插件,可以支持其他的协议.本章节就让CAS Server怎么增加OAuth2.0的登录协议 ...

  4. Envoy实现.NET架构的网关(四)集成IdentityServer4实现OAuth2认证

    什么是OAuth2认证 简单说,OAuth 就是一种授权机制.数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据.系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使 ...

  5. 基于Node的PetShop,oauth2认证RESTful API

    前篇 - 基本认证,用户名密码 后篇 - OAuth2 认证 前文使用包passport实现了一个简单的用户名.密码认证.本文改用oauth2来实现更加安全的认证.全部代码在这里. OAUTH2 用户 ...

  6. 新浪微博的OAuth2认证过程

    1. 创建应用 在weibo.com上申请一个应用,获取app key和app secret, 填写redirect uri 2. 获取code 通过在浏览器访问 https://api.weibo. ...

  7. 使用Fiddler获取OAuth2认证的access token时候返回502

    微软动态CRM专家罗勇 ,回复322或者20190402可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me! 我这里Fiddler的Composer功能来获取OAuth2 认 ...

  8. 自动给 Asp.Net Core WebApi 增加 ApiVersionNeutral

    自动给 Asp.Net Core WebApi 增加 ApiVersionNeutral Intro 新增加一个 Controller 的时候,经常忘记在 Controller 上增加 ApiVers ...

  9. Spring Cloud下基于OAUTH2认证授权的实现

    GitHub(spring -boot 2.0.0):https://github.com/bigben0123/uaa-zuul 示例(spring -boot 2.0.0): https://gi ...

随机推荐

  1. Swift 4.0 + Ipad开发项目中值得注意知识点

    1.注意Xib的约束和代码的约束,注意适配问题: 2.设置view的frame可以使用view.frame.maxX实现布局: 3.UIStackView在xib中的使用,可以很好的实现约束,布局和屏 ...

  2. 【JQuery插件】元素根据滚动条位置自定义吸顶效果

    ;(function($){ $.fn.extend({ /* 元素根据滚动条位置自定义吸顶插件 @defaultTop 初始化top位置 @startTop 开始滚动和回复原样的位置 @demo v ...

  3. linux和windows换行符的^M问题

    起源 在windows中写的脚本执行完全没问题,代码一模一样,切换到linux中执行报错.利用命令 “vi/vim -b 文件名”查看文件发现每行结尾多了“^M”这样的结尾. 根源 通过查询得知,其问 ...

  4. CEIWEI USBMonitor USB监控精灵 v2.3.2 USB过滤驱动 USB监控

    CEIWEI USBMonitor USB监控精灵 是一款监控USB端口协议分析软件,用于监控和分析USB设备协议,可以拦截.记录USB软件程序操作USB设备的In.Out数据包.支持监控分析USB票 ...

  5. httpsqs消息队安装

    HTTPSQS(HTTP Simple Queue Service)是一款基于 HTTP GET/POST 协议的轻量级开源简单消息队列服务,使用 Tokyo Cabinet 的 B+Tree Key ...

  6. JVM(五) 生产环境内存溢出调优

    1.gc配置参数 1.1 控制台打印gc日志 -verbose:gc -XX:+PrintGCDetails -XX:+PrintHeapAtGC(详细的gc信息) 1.2 输出gc日志到指定文件 - ...

  7. [转帖]Red Hat K8s 关键人物 Grant Shipley 跳槽到 VMware

    Red Hat K8s 关键人物 Grant Shipley 跳槽到 VMware   https://news.cnblogs.com/n/641944/ 这四小时的工作效率 太无敌了.. 投递人  ...

  8. [Oracle] - 使用 DBMS_UTILITY 查看异常详情

    DBMS_UTILITY.FORMAT_ERROR_BACKTRACE说明:这是在Oracle 10g数据库引入的,DBMS_UTILITY.FORMAT_ERROR_BACKTRACE内置函数返回一 ...

  9. linux环境下编写shell脚本实现启动停止tomcat服务

    第一步:以管理员的身份进入控制台,在指定目录下新建一个shell脚本,我这里命名为tomcat.sh 第二步:编写shell脚本 #!/bin/bash tomcat_home=/usr/tomcat ...

  10. Java基础笔试练习(五)

    1.以下关于Integer与int的区别错误的是? A.int是java提供的8种原始数据类型之一 B.Integer是java为int提供的封装类 C.int的默认值为0 D.Integer的默认值 ...