写个OAuth2.0的请求端来测试自己的OAuth2.0服务端(二)
在上一篇文章中,我们介绍了怎么创建自己的服务器,现在我们开始写个client端,来测试。
我们创建一个MVC项目,叫TestOAuthClient
1. 代码开始
1)第一步,我们创建一个MainController,在Index方法里面写我们的逻辑。
2)首先获取code,如果没有code,则证明是第一步请求。
3)第一步请求,附上client_id、response_type、redirect_uri、scope、state参数。
这里我们假如服务端的第一步请求认证的地址为:http://localhost:65006/OAuth2Server/Authorize
client_id是请求端在服务端申请的id;
response_type为code;
redirect_uri是告诉服务端,获取code之后返回的地址是什么;
scope自定义;
state自定义。
4)跳转到验证服务器。
5)验证服务器重定向会我们的请求端后(code不为空),请求获取token。
获取token需要传送返回的code、grant_type=authorization_code、client_id、client_secret
6)通过服务器返回的token,请求服务端获取用户信息。
代码就几行,如下:
public ActionResult Index()
{
string code = Request["code"] ?? ""; if (string.IsNullOrEmpty(code))
{
//第一步,请求获取code(请求OAuth服务器)
string client_id = "testclientid";
string response_type = "code";
string redirect_uri = HttpUtility.UrlEncode("http://localhost:61481/Main/Index");
string scope = "";
string state = "";
string url = string.Format
("http://localhost:65006/OAuth2Server/Authorize?client_id={0}&response_type={1}&redirect_uri={2}&scope={3}&state={4}",
client_id, response_type, redirect_uri, scope, state);
Response.Redirect(url);
return null;
}
else
{
//第二步,获取code之后请求获取token(请求OAuth服务器)
RestClient clientToken = new RestClient("http://localhost:65006/OAuth2Server/GetToken");
IRestRequest requestToken = new RestRequest();
requestToken.AddParameter("code", code);
requestToken.AddParameter("grant_type", "authorization_code");
requestToken.AddParameter("client_id", "testclientid");
requestToken.AddParameter("client_secret", "testclientsecret");
IRestResponse responseToken = clientToken.Execute(requestToken);
string access_token = responseToken.Content.Replace("\"", ""); //第三部,获取token之后,获取user信息(请求OAuth服务器)
RestClient clientUserInfo = new RestClient("http://localhost:65006/OAuth2Server/UserInfo");
IRestRequest requestUserInfo = new RestRequest();
requestUserInfo.AddParameter("oauth_token", access_token);
IRestResponse responseUserInfo = clientUserInfo.Execute(requestUserInfo);
string userInfoContent = responseUserInfo.Content;
//返回获取到的用户信息
return this.Json("userInfoContent=" + userInfoContent, JsonRequestBehavior.AllowGet);
}
}
源代码如下: https://github.com/cjt321/TestOAuthClient/
2. 开始调试
1)请求端(TestOAuthClient)的地址为:http://localhost:61481/Main/Index
2)在浏览器上输入上面地址,会重定向到用户是否允许授权的页面。(此页面是服务端的页面)

当我们输入正确的用户名&密码之后,会发现,再请求端能获取到用户的信息。
到此,测试结束。
可以关注本人的公众号,多年经验的原创文章共享给大家。

写个OAuth2.0的请求端来测试自己的OAuth2.0服务端(二)的更多相关文章
- [JavaEE]Get请求URI中带的中文参数在服务端乱码问题的解决方法
在Get请求中,如果请求参数中带有中文,如 http://localhost:8080/DinnerParty/shop/search?query=多伦多, 在服务端拿到的是乱码. 这是因为客户端提交 ...
- 【笔记7-部署发布】从0开始 独立完成企业级Java电商网站开发(服务端)
阿里云服务 购买 连接 购买域名 域名备案 域名解析 源配置步骤 资源地址 http://learning.happymmall.com/ 配置阿里云的yum源 1.备份 mv /etc/yum.re ...
- 【笔记6-支付及订单模块】从0开始 独立完成企业级Java电商网站开发(服务端)
支付模块 实际开发工作中经常会遇见如下场景,一个支付模块,一个订单模块,有一定依赖,一个同事负责支付模块,另一个同事负责订单模块,但是开发支付模块的时候要依赖订单模块的相关类 ,方法,或者工具类,这些 ...
- 在ASP.NET MVC下实现单个图片上传, 客户端服务端双重限制图片大小和格式, 服务端裁剪图片
在"MVC文件图片ajax上传轻量级解决方案,使用客户端JSAjaxFileUploader插件01-单文件上传"一文中,使用JSAjaxFileUploader这款插件实现了单文 ...
- SpringCloud02 Eureka知识点、Eureka服务端和客户端的创建、Eureka服务端集群、Eureka客户端向集群的Eureka服务端注册
1 Eureka知识点 按照功能划分: Eureka由Eureka服务端和Eureka客户端组成 按照角色划分: Eureka由Eureka Server.Service Provider.Servi ...
- webservice 服务端例子+客户端例子+CXF整合spring服务端测试+生成wsdl文件 +cxf客户端代码自动生成
首先到CXF官网及spring官网下载相关jar架包,这个不多说.webservice是干嘛用的也不多说. 入门例子 模拟新增一个用户,并返回新增结果,成功还是失败. 大概的目录如上,很简单. Res ...
- 【笔记3-用户模块】从0开始 独立完成企业级Java电商网站开发(服务端)
数据表结构设计 关系设计 为什么不用外键? 分库分表有外键会非常麻烦,清洗数据也很麻烦.数据库内置触发器也不适合采用. 查业务问题的后悔药--时间戳 create_time 数据创建时间 update ...
- 【笔记8-Redis分布式锁】从0开始 独立完成企业级Java电商网站开发(服务端)
Redis分布式锁 Redis分布式锁命令 setnx当且仅当 key 不存在.若给定的 key 已经存在,则 setnx不做任何动作.setnx 是『set if not exists』(如果不存在 ...
- 【笔记5-购物车及地址模块】从0开始 独立完成企业级Java电商网站开发(服务端)
购物车模块 数据库表设计 购物车表 CREATE TABLE mmall_ cart ( 'id' int(11) NOT NULL AUTO_ INCREMENT, 'user_ id' int(1 ...
随机推荐
- Tencent interview
1.常见的聚类算法 1):划分法:k-means 2):基于密度的方法: 2.EM 算法 EM算法是在概率模型中寻找参数的最大似然估计或者最大后验概率的算法,其中概率模型依赖于无法观测的隐藏变量.EM ...
- easyUi DataGrid 显示日期列,时间为空也可,的正常显示,及普通居中列情况
$('#tt').datagrid({ url: '@Url.Content("~/kpi/FindList")', w ...
- [转载]金融行业 DevOps 解决方案概述
2009 年 6 月份,John Allspaw 及 Paul Hammond 在速度大会 (Velocity) 上分享了在 Flickr 中如何通过加强 Dev(开发团队)和 Ops(运维团队)之间 ...
- docker容器中的peewee如何连接已有的容器中的数据库
首先,两个容器必须是在同一网络下,有2个办法. 一个是在同一个docker-compose.yml文件下使用links参数,比如: version: '3' services: redis: imag ...
- C# byte和10进制、16进制相互转换
var SRMP = new byte[4]; Array.Copy(Encoding.UTF8.GetBytes(1.ToString("x2")), SRMP, Encodin ...
- CefSharp.v49.0.1浏览器控件完全WPF版,实现禁止弹出新窗口,在同一窗口打开链接,并且支持带type="POST" target="_blank"的链接
需求场景:在查询页面,填写查询条件,查询条件包括上传的图片,根据图片的特征查询,这就需要在提交的时候,使用POST提交,因为GET提交无法提交图片数据,提交查询条件之后,在新的窗口展示查询结果.(当然 ...
- 背水一战 Windows 10 (44) - 控件(日期类): CalendarView, DatePicker, TimePicker
[源码下载] 背水一战 Windows 10 (44) - 控件(日期类): CalendarView, DatePicker, TimePicker 作者:webabcd 介绍背水一战 Window ...
- AJPFX平台:外汇的基本面分析
AJPFX平台:开设外汇保证金交易账户以及入金之后,通常就可以开始交易了,但是在选择买卖时点时通常会依据两种分析,两种主要分析方法通常会被称为基本面分析和技术分析.基本面分析注重金融,经济理论和政局发 ...
- Python中super()的用法
参考链接:https://www.cnblogs.com/shengulong/p/7892266.html super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是 ...
- FTP服务安装与端口说明
FTP服务安装与端口说明 FTP端口修改安装部署windowswindows 2012文件服务 1. FTP服务介绍 1.1 什么是FTP FTP(File Transfer Protocol)是文件 ...