相关文章: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/

参考资料:

ASP.NET WebApi OWIN 实现 OAuth 2.0(自定义获取 Token)的更多相关文章

  1. ASP.NET WebApi OWIN 实现 OAuth 2.0

    OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. OAuth 允许用户提供一个令牌, ...

  2. [转]ASP.NET WebApi OWIN 实现 OAuth 2.0

    OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. OAuth 允许用户提供一个令牌, ...

  3. NET WebApi OWIN 实现 OAuth 2.0

    NET WebApi OWIN 实现 OAuth 2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和 ...

  4. asp.net权限认证:OWIN实现OAuth 2.0 之简化模式(Implicit)

    asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...

  5. asp.net权限认证:OWIN实现OAuth 2.0 之客户端模式(Client Credential)

    asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...

  6. 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权限认证 ...

  7. asp.net权限认证:OWIN实现OAuth 2.0 之授权码模式(Authorization Code)

    asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...

  8. c#实现Google账号登入授权(OAuth 2.0)并获取个人信息

    c#实现Google账号登入授权(OAuth 2.0)并获取个人信息   此博主要介绍通过google 账号(gmail)实现登入,授权方式OAuth2.0,下面我们开始介绍. 1.去google官网 ...

  9. 基于ASP.NET WebAPI OWIN实现Self-Host项目实战

    引用 寄宿ASP.NET Web API 不一定需要IIS 的支持,我们可以采用Self Host 的方式使用任意类型的应用程序(控制台.Windows Forms 应用.WPF 应用甚至是Windo ...

随机推荐

  1. css制作小标志

    空心箭头:示例图片 <b class="bottom"><i class="bottom-arrow1"></i><i ...

  2. Mac 与 windows eclipse 快捷键对照

      Mac windows 方法注释 option+command+j alt+shift+j 在方法里上右击,source -> Generate Element Comment 删除当前行 ...

  3. Python利用os模块批量修改文件名

    初学Python.随笔记录自己的小练习. 通过查阅资料os模块中rename和renames都可以做到 他们的区别为.rename:只能修改文件名   renames:可以修改文件名,还可以修改文件上 ...

  4. Python用可变参数找出最大值和最小值

    # 方法一 利用max min 函数. 注意这里max min 分别都是功能函数 def main_m(*args): i = max(args) j = min(args) print(" ...

  5. 想明白为什么C->D

    C公司为什么不行? 钱不够 第一个原因是在新世界,C能够给我的钱是远远低于市场价的.如果按照现公司的行情,也就一个社招人员的白菜价. 领导不行 C公司的领导,从面相上看就无法让我信服.领导力中下,忽悠 ...

  6. .net基础学java系列(八)SpringBoot

    嘟嘟独立博客 Spring-Boot干货系列 http://tengj.top/categories/Spring-Boot干货系列/ 龙码精神 Java Spring Boot VS .NetCor ...

  7. 理解WindowManagerService

    --摘自<Android进阶解密> *WMS的职责* 1)窗口管理 WMS负责窗口的启动.添加和删除,另外窗口的大小和层级也是由WMS进行管理的 2)窗口动画 WMS的动画子系统Windo ...

  8. leetcode刷题五<最长回文子串>

    下面是题目的描述 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 . 示例 : 输入: "babad" 输出: "bab" 注意: ...

  9. iperf3 使用

    iperf 分client 和 server server:   iperf3 -s -p 5000 -i 1 client: iperf3 -c 192.168.31.11 -p 5000 Serv ...

  10. ios6和ios5横竖屏切换

    记录于2013/8/5   在切换横竖屏的时候调用到的一些委托方法: #pragma mark - UIApplicationDelegate //写在Appdelegate中,在具体的某一视图控制器 ...