使用ms owin 搭建oauth2 server
http://www.asp.net/aspnet/overview/owin-and-katana/owin-oauth-20-authorization-server
有示例代码
关于token的加密解密
server 端
- app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions
- {
其中AccessTokenFormat可以设置身份的序列化和加密方式,遗憾的是不能用简单的json或xml,因为有循环引用
是一个实现了ISecureDataFormat<AuthenticationTicket>的类,AuthenticationTicket 中有循环引用,所以json不能
resource端
- app.UseOAuthBearerAuthentication(new Microsoft.Owin.Security.OAuth.OAuthBearerAuthenticationOptions(){
- AccessTokenFormat=……
- });
要设置成同样的处理方式
server端加密,resource端解密
关于Cookie中的Base64字符串
示例代码中,身份认证用的是mvc5新的identiy,而我的身份认证是自定义的(基于以前的一个网站)。cookie中存的是base64的字符,其中可能会存在加号(+)
用原本的Request.Cookie获取,加号取出来就是加号
但是通过IOwinContext取出来,+号变成了空格。
要注意对这部分进行处理
关于客户端和服务器端的交互
整个oauth,可以认为有3方
1、oauth认证服务(server)
2、api服务(resource)
3、要调用api的网站(client)
最终的目的是client获取resource的数据,但是resource的数据不是谁都可以随便取的,所以需要先经过server的认证和授权
如果用.net开发客户端和服务端,则按照例子中的,用DotNetOpenAuth.OAuth2这个,也挺方便
但我们搭建oauth,是要为其他网站服务的,不能仅适用于.net,所以有必要了解一下客户端的流程
首先,针对每一个第三方的客户端(网站或手机app之类的)都需要给他分配(或自己设定)
1、client id 字符串,能够唯一标识一个第三方应用
2、secret 对应的密钥
3、redirect uri 认证之后,认证服务会跳转会应用的页面,此页面接收返回的token
大体流程如下
1、客户端在需要认证的时候,跳转到认证服务器
http://server/OAuth/Authorize?client_id=…&redirect_uri=…&state=…&response_type=code
此时,页面会停留在认证服务器,要浏览器点确定按钮(如果没登录,会先跳转到登录页,登录后还回到这个页)
当用户点确定(同意授权)之后,会跳转会传来的redirect_uri这个参数对应的网址,
如 http://www.abc.com/test/authback
然后在后面会有参数
?code=….&state=….
其中state是你发给服务什么,服务就原样给你返回什么。
你可以,在发送给服务端之前,生成一些随机数,然后保存在cookie,当服务器返回后,与cookie中的比对,来确定在过程中是否有被劫持或进行过其他的改动。
code是关键性的东西,之后我们要写一些程序来向服务发起一个请求会用到此code
2、http://server/OAuth/Token发送post请求到这个地址,并且
form的值包括
- redirect_uri=…&grant_type=authorization_code&code=…
- 其中code,就是上一步获取到的code,grant_type是固定值(这里只针对AuthorizationCodeGrant这种方式)
- redirect_uri还是同样的那个地址(注意这里不能用不一样的地址,因为在注册应用的时候,只设定了这一个地址,所以对所有的返回应用的地址,都要使用这一个)
- 并且,要在header中传递
- Authorization,值为
- clientid+冒号+secret(clientid+”:"+secret)
- 把这个结果用utf8编码方式转成base64字符串
- Authorization这个header中的值为 "Basic "+base64字符串(注意有个空格)
- 如果一切正常,我们能够拿到一个json的返回值,包含了access token,refresh token,以及过期时间等
- 3、拿access token去api服务端获取数据
- 同样,我们在请求api的时候,需要设置header
- Authorization 值为 "bearer "+accesstoken
关于过期时间和刷新
在第二步拿到的json,除了access token以外,还会有
expires_in 和 refresh_token
expires_in是秒
如果过期了,可以拿refresh_token重新获取一个
post请求http://server/OAuth/Token
head与第二步一样
form:
grant_type = refresh_token (固定值)
refresh_token(第二步拿到的字符串)
请求成功后,获取到json(与第二步格式一样)
server中owin的option里可以设置AuthorizationCode和AccessToken的时间,默认是5分钟和20分钟
使用ms owin 搭建oauth2 server的更多相关文章
- 使用 OAuth2-Server-php 在 Yii 框架上搭建 OAuth2 Server
原文转自 http://www.cnblogs.com/ldms/p/4565547.html Yii 有很多 extension 可以使用,在查看了 Yii 官网上提供的与 OAuth 相关的扩展后 ...
- 使用 OAuth2-Server-php 搭建 OAuth2 Server
Yii 有很多 extension 可以使用,在查看了 Yii 官网上提供的与 OAuth 相关的扩展后,发现了几个 OAuth2 的客户端扩展,但是并没有找到可以作为 OAuth2 Server 的 ...
- 使用Owin中间件搭建OAuth2.0认证授权服务器
前言 这里主要总结下本人最近半个月关于搭建OAuth2.0服务器工作的经验.至于为何需要OAuth2.0.为何是Owin.什么是Owin等问题,不再赘述.我假定读者是使用Asp.Net,并需要搭建OA ...
- [2014-11-11]使用Owin中间件搭建OAuth2.0认证授权服务器
前言 这里主要总结下本人最近半个月关于搭建OAuth2.0服务器工作的经验.至于为何需要OAuth2.0.为何是Owin.什么是Owin等问题,不再赘述.我假定读者是使用Asp.Net,并需要搭建OA ...
- Microsoft.Owin.Security.OAuth搭建OAuth2.0授权服务端
Microsoft.Owin.Security.OAuth搭建OAuth2.0授权服务端 目录 前言 OAuth2.0简介 授权模式 (SimpleSSO示例) 使用Microsoft.Owin.Se ...
- Owin中间件搭建OAuth2.0认证授权服务体会
继两篇转载的Owin搭建OAuth 2.0的文章,使用Owin中间件搭建OAuth2.0认证授权服务器和理解OAuth 2.0之后,我想把最近整理的资料做一下总结. 前两篇主要是介绍概念和一个基本的D ...
- ASP.NET Linux部署(2) - MS Owin + WebApi + Mono + Jexus
ASP.NET Linux部署(2) - MS Owin + WebApi + Mono + Jexus 本文承接我的上一篇博文: ASP.NET 5 Linux部署,那篇文章主要是针对最新的ASP. ...
- Spring Cloud 微服务中搭建 OAuth2.0 认证授权服务
在使用 Spring Cloud 体系来构建微服务的过程中,用户请求是通过网关(ZUUL 或 Spring APIGateway)以 HTTP 协议来传输信息,API 网关将自己注册为 Eureka ...
- Spring Cloud(6.2):搭建OAuth2 Client
配置web.xml 添加spring-cloud-starter-security,spring-security-oauth2-autoconfigure和spring-boot-starter-o ...
随机推荐
- MPU6050学习笔记(电源管理器1、2)
Technorati Tags: 嵌入式开发.模块开发 寄存器107号:电源管理器1 PWR_MGMT_1: Description: This register allows the user to ...
- ABP框架入门踩坑-使用MySQL
使用MySQL ABP踩坑记录-目录 起因 因为我自用的服务器只是腾讯云1核1G的学生机,不方便装SQL Server,所以转而MySQL. 这里使用的MySQL版本号为 8.0. 解决方案 删除Qi ...
- pageadmin CMS网站制作教程:
pageadmin CMS网站建设教程:模板中如何实现信息数据共享 很多时候信息数据需要共享,一个最常用的应用场景就是手机版(独立手机,非响应式)本共享pc版本数据,下面以这个场景为例讲解. 假设手机 ...
- flume在windows环境下的使用
Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据:同时,Flume提供对数据进行简单处理, ...
- centos6.2 下安装并配置hadoop1.0.4(32位安装)
一,环境准备 1. 集群内所有电脑需要设置防火墙,下面以master为例说明: 切换到root用户下,执行setup指令:
- Java并发编程实践读书笔记(3)任务执行
类似于Web服务器这种多任务情况时,不可能只用一个线程来对外提供服务.这样效率和吞吐量都太低. 但是也不能来一个请求就创建一个线程,因为创建线程的成本很高,系统能创建的线程数量是有限的. 于是Exec ...
- Centos下用yum命令按照jdk
一.查看是否已经安装了JDK #查看本机是否已经安装了jdk $ sudo yum list installed | grep java java--openjdk.x86_64 :.el7_6 @u ...
- 剑指offer二十八之数组中出现次数超过一半的数字
一.题目 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...
- Windows10下搭建TensorFlow环境
转载请注明源出处:http://www.cnblogs.com/lighten/p/6753695.html 这篇文章介绍了一下在Windows上安装TensorFlow的步骤,主要是翻译了一下官方的 ...
- 【树】Kth Smallest Element in a BST(递归)
题目: Given a binary search tree, write a function kthSmallest to find the kth smallest element in it. ...