首页 > 编程 > .NET > 正文

在ASP.NET Core中实现一个Token base的身份认证实例

2024-07-10 12:49:34
字体:
来源:转载
供稿:网友

以前在web端的身份认证都是基于Cookie | Session的身份认证, 在没有更多的终端出现之前,这样做也没有什么问题,但在Web API时代,你所需要面对的就不止是浏览器了,还有各种客户端,这样就有了一个问题,这些客户端是不知道cookie是什么鬼的。 (cookie其实是浏览器搞出来的小猫腻,用来保持会话的,但HTTP本身是无状态的, 各种客户端能提供的无非也就是HTTP操作的API)

而基于Token的身份认证就是应对这种变化而生的,它更开放,安全性也更高。

基于Token的身份认证有很多种实现方式,但我们这里只使用微软提供的API。

接下来的例子将带领大家完成一个使用微软JwtSecurityTokenHandler完成一个基于beare token的身份认证。

注意:这种文章属于Step by step教程,跟着做才不至于看晕,下载完整代码分析代码结构才有意义。

前期准备

推荐使用VS2015 Update3作为你的IDE,下载地址://www.Vevb.com/softjc/446184.html

你需要安装.NET Core的运行环境以及开发工具,这里提供VS版://www.Vevb.com/softs/472362.html

创建项目

在VS中新建项目,项目类型选择ASP.NET Core Web Application(.NET Core), 输入项目名称为CSTokenBaseAuth

Coding

创建一些辅助类

在项目根目录下创建一个文件夹Auth,并添加RSAKeyHelper.cs以及TokenAuthOption.cs两个文件

在RSAKeyHelper.cs中

using System.Security.Cryptography;namespace CSTokenBaseAuth.Auth{  public class RSAKeyHelper  {    public static RSAParameters GenerateKey()    {      using (var key = new RSACryptoServiceProvider(2048))      {        return key.ExportParameters(true);      }    }  }}

在TokenAuthOption.cs中

using System;using Microsoft.IdentityModel.Tokens;namespace CSTokenBaseAuth.Auth{  public class TokenAuthOption  {    public static string Audience { get; } = "ExampleAudience";    public static string Issuer { get; } = "ExampleIssuer";    public static RsaSecurityKey Key { get; } = new RsaSecurityKey(RSAKeyHelper.GenerateKey());    public static SigningCredentials SigningCredentials { get; } = new SigningCredentials(Key, SecurityAlgorithms.RsaSha256Signature);    public static TimeSpan ExpiresSpan { get; } = TimeSpan.FromMinutes(20);  }}

Startup.cs

在ConfigureServices中添加如下代码:

services.AddAuthorization(auth =>{  auth.AddPolicy("Bearer", new AuthorizationPolicyBuilder()    .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme‌​)    .RequireAuthenticatedUser().Build());});

完整的代码应该是这样

public void ConfigureServices(IServiceCollection services){  // Add framework services.  services.AddApplicationInsightsTelemetry(Configuration);  // Enable the use of an [Authorize("Bearer")] attribute on methods and classes to protect.  services.AddAuthorization(auth =>  {    auth.AddPolicy("Bearer", new AuthorizationPolicyBuilder()      .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme‌​)      .RequireAuthenticatedUser().Build());  });  services.AddMvc();}            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表