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
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(); } }
|