🙂 İNSANLARIN EN HAYIRLISI INSANLARA FAYDALI OLANDIR 🙂

Ramazan HABER / .Net Core Web Api / net core web api 2 jwt token oluşturma ve apiyi yetkilendirme Authentication Authorization bearer

1-) .Net 6 Core Web Api  - net core web api 2 jwt token oluşturma ve apiyi yetkilendirme Authentication Authorization bearer

 

github link : https://github.com/ramazanhaber/NetCoreApiTokenAuth

 

 // NuGet\Install-Package Microsoft.AspNetCore.Authentication.JwtBearer -Version 7.0.14

 

 [Authorize]  -> zorunlu kılar

 [AllowAnonymous] -> zorunlu kılmaz

 [Authorize(Roles = "admin")] // sadece admin

 

eklenecek kod 1 Program.cs

 

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)

    .AddJwtBearer(options =>

    {

        options.TokenValidationParameters = new TokenValidationParameters

        {

            ValidateIssuer = false,

            ValidateAudience = false,

            ValidateIssuerSigningKey = true,

            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-key"))

        };

    });

 

var app = builder.Build();

 

eklenecek kod 2

 

 

 [Route("loginol")]

 [HttpGet]

 public string login(string username, string role)

 {

     return "Bearer " + GenerateToken(username,role);

 }

 

 

 private string GenerateToken(string username, string role)

 {

     var claims = new List<Claim>{

                      new Claim(ClaimTypes.Name, username),

                      new Claim(ClaimTypes.Role, role)

                      };

 

     var secretKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-key"));

 

     var signinCredentials = new SigningCredentials(secretKey, SecurityAlgorithms.HmacSha256);

     var tokeOptions = new JwtSecurityToken(

         claims: claims,

         expires: DateTime.Now.AddHours(10),

         signingCredentials: signinCredentials

     );

     var tokenString = new JwtSecurityTokenHandler().WriteToken(tokeOptions);

 

     return tokenString;

 

 }

 

 

KULLANIMI [Authorize]

 [Route("get")]

 [Authorize]

 [HttpGet]

 public string Get()

 {

     return "RAMBO";

 }

 

KULLANIMI İSTEK İSE

HEADERA EKLE

Authorization

 

Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MDAwNDcxNTN9.kq6m-CNvmoZkPljmsNFPcKhBP2s4GdWzCIsMHK27RQY

 

 

TÜM Program.cs

 

using Microsoft.AspNetCore.Authentication.JwtBearer;

using Microsoft.IdentityModel.Tokens;

using System.Text;

 

var builder = WebApplication.CreateBuilder(args);

 

builder.Services.AddCors();

builder.Services.AddControllers();

builder.Services.AddEndpointsApiExplorer();

builder.Services.AddSwaggerGen();

 

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)

    .AddJwtBearer(options =>

    {

        options.TokenValidationParameters = new TokenValidationParameters

        {

            ValidateIssuer = false,

            ValidateAudience = false,

            ValidateIssuerSigningKey = true,

            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-key"))

        };

    });

 

var app = builder.Build();

 

app.UseCors(builder => builder

.AllowAnyHeader()

.AllowAnyMethod()

.AllowAnyOrigin()

);

 

if (app.Environment.IsDevelopment() || app.Environment.IsProduction())

{

    app.UseDeveloperExceptionPage();

    app.UseSwagger();

    app.UseSwaggerUI(c => {

        c.SwaggerEndpoint("/swagger/v1/swagger.json", "myapi v1");

    });

}

 

app.UseHttpsRedirection();

 

app.UseAuthentication();// auth için

app.UseAuthorization();

 

app.MapControllers();

 

app.Run();

 

 

 

 

 

****** SAYFAYA AUTH İNPUTU EKLEMEK ******

 

1- SecurityRequirementsOperationFilter.cs

using Microsoft.OpenApi.Models;

using Swashbuckle.AspNetCore.SwaggerGen;

 

namespace KaliteApi.Config

{

    public class SecurityRequirementsOperationFilter : IOperationFilter

    {

        public void Apply(OpenApiOperation operation, OperationFilterContext context)

        {

            if (context != null && operation != null)

            {

                bool requireAuth = true;

                string id = "Bearer"; // Assuming you are using Bearer token authentication

 

                if (requireAuth && !string.IsNullOrEmpty(id))

                {

                    operation.Responses.Add("401", new OpenApiResponse { Description = "Unauthorized" });

 

                    operation.Security = new List<OpenApiSecurityRequirement>

                    {

                        new OpenApiSecurityRequirement

                        {

                            {

                                new OpenApiSecurityScheme

                                {

                                    Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = id }

                                },

                                new List<string>()

                            }

                        }

                    };

                }

            }

        }

    }

}

 

 

 

2- Program.cs (sadece eklenmesi gereken)

//builder.Services.AddSwaggerGen();

 

builder.Services.AddSwaggerGen(c =>

{

 

    c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme

    {

        Description = "Standard Authorization header using the Bearer scheme (JWT). Example: \"bearer {token}\"",

        Name = "Authorization",

        In = ParameterLocation.Header,

        Type = SecuritySchemeType.ApiKey,

        Scheme = "Bearer"

    });

    c.OperationFilter<KaliteApi.Config.SecurityRequirementsOperationFilter>();

});

3- Program.cs (KOMPLE)

using KaliteApi.Entities;

using Microsoft.AspNetCore.Authentication.JwtBearer;

using Microsoft.IdentityModel.Tokens;

using Microsoft.OpenApi.Models;

using System.Text;

 

var builder = WebApplication.CreateBuilder(args);

 

builder.Services.AddCors();

builder.Services.AddControllers();

builder.Services.AddEndpointsApiExplorer();

//builder.Services.AddSwaggerGen();

 

builder.Services.AddSwaggerGen(c =>

{

 

    c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme

    {

        Description = "Standard Authorization header using the Bearer scheme (JWT). Example: \"bearer {token}\"",

        Name = "Authorization",

        In = ParameterLocation.Header,

        Type = SecuritySchemeType.ApiKey,

        Scheme = "Bearer"

    });

    c.OperationFilter<KaliteApi.Config.SecurityRequirementsOperationFilter>();

});

 

builder.Services.AddDbContext<Context>();// veri tabanı bağlantı yeri

 

 

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)

    .AddJwtBearer(options =>

    {

        options.TokenValidationParameters = new TokenValidationParameters

        {

            ValidateIssuer = false,

            ValidateAudience = false,

            ValidateIssuerSigningKey = true,

            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-keyyour-secret-key"))

        };

    });

 

var app = builder.Build();

 

 

app.UseCors(builder => builder

.AllowAnyHeader()

.AllowAnyMethod()

.AllowAnyOrigin()

);

 

if (app.Environment.IsDevelopment() || app.Environment.IsProduction())

{

    app.UseDeveloperExceptionPage();

    app.UseSwagger();

    app.UseSwaggerUI(c =>

    {

        c.SwaggerEndpoint("/swagger/v1/swagger.json", "myapi v1");

    });

}

 

app.UseHttpsRedirection();

 

app.UseAuthentication();// auth için

app.UseAuthorization();

 

app.MapControllers();

 

app.Run();

 

 

 

 

****** SWAGGER CLİENT ******

 

bu şekilde bir link oluşur : https://localhost:7009/swagger/v1/swagger.json

 

bu linki OpenApi olarak Proje sağtıl -> add -> Connected Services -> OpenApi olarak ekleriz.

 

1- KULLANIMI

 

private void button1_Click(object sender, EventArgs e)

{

    using (var httpclient = new HttpClient())

    {

        Client swagger = new Client("https://localhost:7009", httpclient);

        var loginresponse = swagger.LoginolAsync("1", "admin").Result;

 

        httpclient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "" + loginresponse.Replace("Bearer ", "").Trim());

 

        var herkesresponse = swagger.GetHerkesAsync().Result;

 

        List<Ogrenci> ogrencilistesi = swagger.GetOgrenciAsync().Result.ToList();

    }

}

 

 

 2023 Aralık 18 Pazartesi
 335