ASP.NET WebApi OWIN 实现 OAuth 2.0(自定义获取 Token)
相关文章:ASP.NET WebApi OWIN 实现 OAuth 2.0
之前的项目实现,Token 放在请求头的 Headers 里面,类似于这样:
Accept: application/json
Content-Type: application/json
Authorization: Bearer pADKsjwMv927u...
虽然这是最标准的实现方式,但有时候我们会面对一些业务变化,比如 Token 要求放在 URL 或是 Post Body 里面,比如这样:
https://www.domain.com/api/MyController?access_token=pADKsjwMv927u...
ASP.NET WebApi OWIN 实现上面的需求,有很多种方式,这边只记录两种。
第一种方式,重写OAuthBearerAuthenticationOptions
,将Startup.Auth.cs
改造如下:
public partial class Startup
{
public void ConfigureAuth(IAppBuilder app)
{
var OAuthOptions = new OAuthAuthorizationServerOptions
{
AllowInsecureHttp = true,
AuthenticationMode = AuthenticationMode.Active,
TokenEndpointPath = new PathString("/token"), //获取 access_token 认证服务请求地址
AuthorizeEndpointPath=new PathString("/authorize"), //获取 authorization_code 认证服务请求地址
AccessTokenExpireTimeSpan = TimeSpan.FromSeconds(100), //access_token 过期时间
Provider = new OpenAuthorizationServerProvider(), //access_token 相关认证服务
AuthorizationCodeProvider = new OpenAuthorizationCodeProvider(), //authorization_code 认证服务
RefreshTokenProvider = new OpenRefreshTokenProvider() //refresh_token 认证服务
};
app.UseOAuthBearerTokens(OAuthOptions); //表示 token_type 使用 bearer 方式
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()
{
//从url中获取token,兼容hearder方式
Provider = new QueryStringOAuthBearerProvider("access_token")
});
}
}
public class QueryStringOAuthBearerProvider : OAuthBearerAuthenticationProvider
{
readonly string _name;
public QueryStringOAuthBearerProvider(string name)
{
_name = name;
}
public override Task RequestToken(OAuthRequestTokenContext context)
{
var value = context.Request.Query.Get(_name);
if (!string.IsNullOrEmpty(value))
{
context.Token = value;
}
return Task.FromResult<object>(null);
}
}
测试效果:
或者直接简单粗暴的方式(不推荐),增加请求拦截,添加Application_BeginRequest
代码如下:
protected void Application_BeginRequest(object sender, EventArgs e)
{
//从url中获取token的另外一种解决方式
if (ReferenceEquals(null, HttpContext.Current.Request.Headers["Authorization"]))
{
var token = HttpContext.Current.Request.Params["access_token"];
if (!String.IsNullOrEmpty(token))
{
HttpContext.Current.Request.Headers.Add("Authorization", "Bearer " + token);
}
}
}
项目源码:https://github.com/yuezhongxin/OAuth2.Demo/
参考资料:
- How can I validate my custom Oauth2 access token in server-side
- ASP.NET Web Api: How to pass an access token (oAuth 2.0) using URL parameter?
ASP.NET WebApi OWIN 实现 OAuth 2.0(自定义获取 Token)的更多相关文章
- ASP.NET WebApi OWIN 实现 OAuth 2.0
OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. OAuth 允许用户提供一个令牌, ...
- [转]ASP.NET WebApi OWIN 实现 OAuth 2.0
OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. OAuth 允许用户提供一个令牌, ...
- NET WebApi OWIN 实现 OAuth 2.0
NET WebApi OWIN 实现 OAuth 2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和 ...
- asp.net权限认证:OWIN实现OAuth 2.0 之简化模式(Implicit)
asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...
- asp.net权限认证:OWIN实现OAuth 2.0 之客户端模式(Client Credential)
asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...
- asp.net权限认证:OWIN实现OAuth 2.0 之密码模式(Resource Owner Password Credential)
asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...
- asp.net权限认证:OWIN实现OAuth 2.0 之授权码模式(Authorization Code)
asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...
- c#实现Google账号登入授权(OAuth 2.0)并获取个人信息
c#实现Google账号登入授权(OAuth 2.0)并获取个人信息 此博主要介绍通过google 账号(gmail)实现登入,授权方式OAuth2.0,下面我们开始介绍. 1.去google官网 ...
- 基于ASP.NET WebAPI OWIN实现Self-Host项目实战
引用 寄宿ASP.NET Web API 不一定需要IIS 的支持,我们可以采用Self Host 的方式使用任意类型的应用程序(控制台.Windows Forms 应用.WPF 应用甚至是Windo ...
随机推荐
- 高可用Redis(二):字符串类型
1.Redis字符串结构 对于Redis来说,所有的key都是字符串,其value可以是string,list,hash,set,zset 比如下面的 键值对的value还可以更加复杂,比如可以是js ...
- 服务器端 less的安装
一. 安装 npm apt-get install npm 二. 安装less 在服务器端安装 LESS 的最简单方式就是通过 npm(node 的包管理器), 像这样: $ npm install ...
- JSP项目前端优化
问题:在谷歌浏览器中兼容问题,在点击超链接第一次会跳到头部,第二次点击才能打开的问题. 解决方案:是href的问题,删除href的属性,使用click事件,并添加a的超链接样式. #othera{ c ...
- foot
码云链接:https://gitee.com/zyyyyyyyyyyy/codes/rcfdzmin4a82v975pl1ko47 效果图: 原网站截图: 源代码: <!DOCTYPE html ...
- HttpClient不必每次新建实例而RestSharp推荐新建实例的原因
https://stackoverflow.com/questions/49588205/should-restclient-be-singleton-or-new-for-every-request ...
- 原生JS插件(超详细)
作为一个前端er,如果不会写一个小插件,都不好意思说自己是混前端界的.写还不能依赖jquery之类的工具库,否则装得不够高端.那么,如何才能装起来让自己看起来逼格更高呢?当然是利用js纯原生的写法啦. ...
- zabbix编译安装
第一部分zabbix安装部署,实现分布式监控及网络知识 #yum install lrzsz.x86_64 传送文件 安装mysql脚本 #!/bin/bash DIR = pwd NAME = ...
- 在无向图中找最短桥(tarjan)
题目:hdu 4738 题目意思: 曹操有N个岛,这些岛用M座桥连接起来 每座桥有士兵把守(也可能没有) 周瑜想让这N个岛不连通,但只能炸掉一座桥 并且炸掉一座桥需要派出不小于守桥士兵数的人去 解题 ...
- 修改 salt-minion 的 ID 后报错解决方法
当在搭建 Saltstack 集中化管理平台配置完毕时,启动服务时,不知道是否你也越到过如下报错的现象呢? 报错问题如下: [root@saltstack_web1group_1 ~]# vim /e ...
- 信息学奥赛辅导经验谈 & 问题教学法中的学生思维能力培养
转载来自朱全民名师工作室 信息学奥赛辅导经验谈 全国青少年信息学奥林匹克分区竞赛(简称NOI)是经中国科协.国家教育部批准,由中国计算机学会主办的一项全国性的青少年学科竞赛活动.随着信息学奥林匹克竞赛 ...