OrhAuth 1.0.3
See the version list below for details.
dotnet add package OrhAuth --version 1.0.3
NuGet\Install-Package OrhAuth -Version 1.0.3
<PackageReference Include="OrhAuth" Version="1.0.3" />
<PackageVersion Include="OrhAuth" Version="1.0.3" />
<PackageReference Include="OrhAuth" />
paket add OrhAuth --version 1.0.3
#r "nuget: OrhAuth, 1.0.3"
#:package OrhAuth@1.0.3
#addin nuget:?package=OrhAuth&version=1.0.3
#tool nuget:?package=OrhAuth&version=1.0.3
OrhAuth
JWT Tabanlı Kimlik Doğrulama ve Yetkilendirme Kütüphanesi
OrhAuth, .NET Framework projeleri için geliştirilmiş, kolay entegre edilebilen, JWT tabanlı bir kimlik doğrulama ve yetkilendirme kütüphanesidir.
Entity Framework 6 altyapısını kullanarak, kullanıcı yönetimi, rol tabanlı yetkilendirme ve token yönetimi işlemlerini kolaylaştırır.
İçindekiler
- Özellikler
- Kurulum
- Hızlı Başlangıç
- Yapılandırma
- User Sınıfını Genişletme
- API Kullanımı
- Kullanıcı Kaydı
- Kullanıcı Girişi
- Token Yenileme
- Yetkilendirme
- Gelişmiş Özellikler
- Örnekler
- SSS
Özellikler
- JWT Kimlik Doğrulama: Endüstri standardı JSON Web Token tabanlı kimlik doğrulama
- Rol-Tabanlı Yetkilendirme: Esnek yetkilendirme altyapısı
- Refresh Token Desteği: Uzun süreli oturum yönetimi
- Entity Framework 6 Entegrasyonu: Kod-öncelikli (Code-First) yaklaşım ile veritabanı yönetimi
- Dinamik User Sınıfı Genişletme: Özel kullanıcı özellikleri ekleme imkanı
- Otomatik Veritabanı Oluşturma: İlk kullanımda veritabanı ve temel verileri otomatik oluşturma
- OWIN Entegrasyonu: OWIN middleware desteği
Kurulum
NuGet Paketi Yükleme
PM> Install-Package OrhAuth
Veritabanı Bağlantı Bilgisini Ayarlama
Web.config veya App.config dosyanıza aşağıdaki bağlantı dizesini ekleyin:
<connectionStrings>
<add name="AuthDbConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=OrhAuthDb;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
JWT Yapılandırması
AppSettings bölümüne JWT ayarlarını ekleyin:
<appSettings>
<add key="Jwt:SecurityKey" value="buraya_guclu_bir_guvenlik_anahtari_yazin_en_az_32_karakter_olmali" />
<add key="Jwt:Issuer" value="https://sizin-siteniz.com" />
<add key="Jwt:Audience" value="https://sizin-api-adresiniz.com" />
<add key="Jwt:AccessTokenExpiration" value="60" />
<add key="Jwt:RefreshTokenTTL" value="7" />
</appSettings>
Hızlı Başlangıç
OrhAuth'u projenize eklemek ve yapılandırmak için aşağıdaki adımları izleyin:
using OrhAuth.Configurations;
using OrhAuth.Extensions;
using OrhAuth.Services;
// Program.cs veya Global.asax.cs içinde
public static class Startup
{
public static void ConfigureAuth()
{
// OrhAuth yapılandırması
var authOptions = new OrhAuthOptions
{
ConnectionString = "Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=OrhAuthDb;Integrated Security=True",
CreateDatabaseIfNotExists = true,
TokenSecurityKey = "buraya_guclu_bir_guvenlik_anahtari_yazin_en_az_32_karakter_olmali",
TokenIssuer = "https://sizin-siteniz.com",
TokenAudience = "https://sizin-api-adresiniz.com",
TokenExpirationMinutes = 60
};
// Auth servisini yapılandır
IAuthService authService = OrhAuthExtensions.ConfigureOrhAuth(authOptions);
// İsteğe bağlı: Service locator veya DI container'a kaydet
// ServiceLocator.Register<IAuthService>(authService);
}
}
Yapılandırma
OrhAuth, farklı ortamlarda esnek kullanım için çeşitli yapılandırma seçenekleri sunar.
OrhAuthOptions Sınıfı
var options = new OrhAuthOptions
{
// Veritabanı yapılandırması
ConnectionString = "your_connection_string",
CreateDatabaseIfNotExists = true, // İlk çalıştırmada veritabanını oluşturur
// JWT yapılandırması
TokenSecurityKey = "your_security_key",
TokenIssuer = "your_issuer",
TokenAudience = "your_audience",
TokenExpirationMinutes = 60
};
Web.config/App.config Üzerinden Yapılandırma
Bu durumda OrhAuth, app settings'ten değerleri otomatik olarak okur:
// Parametre vermeden oluşturduğunuzda app.config/web.config'ten okur
var authService = OrhAuthExtensions.ConfigureOrhAuth(new OrhAuthOptions
{
ConnectionString = "your_connection_string",
CreateDatabaseIfNotExists = true
});
User Sınıfını Genişletme
OrhAuth, User
sınıfını projelerinize özel gereksinimlerinize göre genişletmenize olanak tanır. Bu, ExtendUserAttribute
özniteliği kullanılarak yapılır:
using OrhAuth.Attributes;
using OrhAuth.Models.Entities;
// User sınıfını genişleten yeni bir sınıf
public class ExtendedUser : User
{
[ExtendUser(maxLength: 100, isRequired: true, description: "Departman bilgisi")]
public string Department { get; set; }
[ExtendUser(isUnique: true, description: "Çalışan numarası")]
public string EmployeeNumber { get; set; }
[ExtendUser(dbType: "datetime2")]
public DateTime LastLoginDate { get; set; }
}
2. OrhAuthOptions'a Genişletilmiş User Type'ı Belirtin
var authOptions = new OrhAuthOptions
{
ConnectionString = "your_connection_string",
CreateDatabaseIfNotExists = true,
TokenSecurityKey = "your_security_key",
TokenIssuer = "your_issuer",
TokenAudience = "your_audience",
TokenExpirationMinutes = 60,
// Genişletilmiş user type'ı belirt
ExtendedUserType = typeof(ExtendedUser) // Önemli: Bu satırı eklemeyi unutmayın!
};
IAuthService authService = OrhAuthExtensions.ConfigureOrhAuth(authOptions);
3. Veritabanı Oluşturma
- Eğer veritabanı ilk kez oluşturuluyorsa (
CreateDatabaseIfNotExists = true
), genişletilmiş alanlar otomatik olarak eklenecektir. - Eğer veritabanı zaten mevcutsa, yeni alanların eklenmesi için veritabanını manuel olarak silin (yeniden oluşturulacaktır)
Önemli Notlar
- ExtendedUser sınıfınızın public olduğundan emin olun
- OrhAuth.Attributes namespace'ini doğru şekilde import ettiğinizden emin olun
- Veritabanına yeterli erişim yetkilerinizin olduğundan emin olun
- [ExtendUser] özniteliği aşağıdaki özellikleri destekler:
- maxLength: Alan uzunluğu
- isRequired: Zorunlu alan
- isUnique: Benzersiz alan
- dbType: Veritabanı tipi
- description: Alan açıklaması
Bu genişletme özellikleri, OrhAuth ilk çalıştırıldığında veritabanına otomatik olarak eklenir.
ExtendUserAttribute
Parametreleri
Parametre | Tip | Varsayılan | Açıklama |
---|---|---|---|
maxLength | int | 255 | String alanların maksimum uzunluğu |
isRequired | bool | false | Zorunlu alan mı? |
isUnique | bool | false | Benzersiz bir alan mı? |
defaultValue | string | null | Varsayılan değer |
description | string | null | Alan açıklaması |
order | int | 0 | Sıralama değeri |
dbType | string | null | Veritabanı alan tipi (örn: "nvarchar", "datetime2") |
API Kullanımı
Kullanıcı Kaydı
public ActionResult Register(RegisterViewModel model)
{
try
{
var userDto = new UserForRegisterDto
{
Email = model.Email,
Password = model.Password,
FirstName = model.FirstName,
LastName = model.LastName,
LocalityId = "1" // İsteğe bağlı, şube/lokasyon bilgisi
};
// Kullanıcıyı kaydet
var user = _authService.Register(userDto);
// İsteğe bağlı: Kullanıcıya rol atama
_authService.AddClaim(user.Id, "User");
// Kullanıcı kaydedildikten sonra giriş için token al
var loginDto = new UserForLoginDto { Email = model.Email, Password = model.Password };
var token = _authService.Login(loginDto);
return Json(new { success = true, token = token });
}
catch (Exception ex)
{
return Json(new { success = false, message = ex.Message });
}
}
Kullanıcı Girişi
public ActionResult Login(LoginViewModel model)
{
try
{
var loginDto = new UserForLoginDto
{
Email = model.Email,
Password = model.Password
};
var token = _authService.Login(loginDto);
if (token != null)
{
// Session'a token bilgisini kaydet (isteğe bağlı)
Session["AccessToken"] = token.Token;
Session["RefreshToken"] = token.RefreshToken;
return Json(new {
success = true,
token = token.Token,
refreshToken = token.RefreshToken,
expiration = token.Expiration
});
}
return Json(new { success = false, message = "Geçersiz kullanıcı adı veya şifre" });
}
catch (Exception ex)
{
return Json(new { success = false, message = ex.Message });
}
}
Token Yenileme
public ActionResult RefreshToken(string refreshToken)
{
try
{
var tokenDto = _authService.RefreshToken(refreshToken);
if (tokenDto != null)
{
return Json(new {
success = true,
token = tokenDto.Token,
refreshToken = tokenDto.RefreshToken,
expiration = tokenDto.Expiration
});
}
return Json(new { success = false, message = "Geçersiz yenileme jetonu" });
}
catch (Exception ex)
{
return Json(new { success = false, message = ex.Message });
}
}
Yetkilendirme
OWIN middleware kullanarak API rotalarınızı yetkilendirmek için:
// Startup.cs veya OWIN yapılandırma dosyasında
public class Startup
{
public void Configuration(IAppBuilder app)
{
// JWT kimlik doğrulama ayarları
var tokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = ConfigurationManager.AppSettings["Jwt:Issuer"],
ValidAudience = ConfigurationManager.AppSettings["Jwt:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(ConfigurationManager.AppSettings["Jwt:SecurityKey"]))
};
// OWIN middleware yapılandırması
app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions
{
TokenValidationParameters = tokenValidationParameters
});
// Web API yapılandırması
var config = new HttpConfiguration();
WebApiConfig.Register(config);
app.UseWebApi(config);
}
}
Controller seviyesinde yetkilendirme:
[Authorize]
public class SecureApiController : ApiController
{
[HttpGet]
public IHttpActionResult GetProtectedData()
{
return Ok(new { message = "Bu veri korunuyor!" });
}
[HttpGet]
[Authorize(Roles = "Admin")]
public IHttpActionResult GetAdminOnlyData()
{
return Ok(new { message = "Bu veri sadece Admin rolüne sahip kullanıcılar için!" });
}
}
Gelişmiş Özellikler
Özel Rol Yönetimi
// Yeni rol oluşturma
public void CreateRole(string roleName)
{
var operationClaim = new OperationClaim { Name = roleName };
_operationClaimRepository.Add(operationClaim);
}
// Kullanıcıya rol atama
public void AssignRoleToUser(int userId, string roleName)
{
var user = _userRepository.Get(u => u.Id == userId);
var role = _operationClaimRepository.Get(r => r.Name == roleName);
if (user != null && role != null)
{
var userOperationClaim = new UserOperationClaim
{
UserId = user.Id,
OperationClaimId = role.Id
};
_userOperationClaimRepository.Add(userOperationClaim);
}
}
Kullanıcı Profili Genişletme
Önceden tanımladığınız genişletilmiş alanlarla kullanıcı profili yönetimi:
// Genişletilmiş kullanıcı bilgilerini güncelleme
public void UpdateUserProfile(ExtendedUser user)
{
var existingUser = _userRepository.Get(u => u.Id == user.Id);
if (existingUser != null)
{
// Temel User özelliklerini güncelle
existingUser.FirstName = user.FirstName;
existingUser.LastName = user.LastName;
existingUser.Email = user.Email;
// ... diğer temel özellikler
// Genişletilmiş özellikleri reflection ile güncelle
foreach (var property in typeof(ExtendedUser).GetProperties())
{
if (property.IsDefined(typeof(ExtendUserAttribute), false))
{
var value = property.GetValue(user);
property.SetValue(existingUser, value);
}
}
_userRepository.Update(existingUser);
}
}
Kullanıcı Listesi Sorgulama
// Aktif kullanıcıları listeleme
public List<User> GetActiveUsers()
{
return _userRepository.GetList(u => u.IsActive && !u.IsDeleted);
}
// Belirli bir role sahip kullanıcıları listeleme
public List<User> GetUsersInRole(string roleName)
{
var role = _operationClaimRepository.Get(r => r.Name == roleName);
if (role != null)
{
return _userRepository.GetList(
u => u.UserOperationClaims.Any(uoc => uoc.OperationClaimId == role.Id && !u.IsDeleted)
);
}
return new List<User>();
}
Örnekler
Web MVC Projesi Entegrasyonu
// Global.asax.cs
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
// OrhAuth yapılandırması
var authOptions = new OrhAuthOptions
{
ConnectionString = ConfigurationManager.ConnectionStrings["AuthDbConnection"].ConnectionString,
CreateDatabaseIfNotExists = true
// Diğer ayarlar varsayılan değerlerle kullanılacak
};
// Auth servisini yapılandır ve global olarak kaydet
GlobalVariables.AuthService = OrhAuthExtensions.ConfigureOrhAuth(authOptions);
}
// GlobalVariables.cs
public static class GlobalVariables
{
public static IAuthService AuthService { get; set; }
}
Web API Projesi Entegrasyonu
// OWIN Startup.cs
public class Startup
{
public void Configuration(IAppBuilder app)
{
// OrhAuth yapılandırma
var authOptions = new OrhAuthOptions
{
ConnectionString = ConfigurationManager.ConnectionStrings["AuthDbConnection"].ConnectionString,
CreateDatabaseIfNotExists = true,
TokenSecurityKey = ConfigurationManager.AppSettings["Jwt:SecurityKey"],
TokenIssuer = ConfigurationManager.AppSettings["Jwt:Issuer"],
TokenAudience = ConfigurationManager.AppSettings["Jwt:Audience"],
TokenExpirationMinutes = int.Parse(ConfigurationManager.AppSettings["Jwt:AccessTokenExpiration"])
};
// Auth servisini yapılandır
var authService = OrhAuthExtensions.ConfigureOrhAuth(authOptions);
// DI Container'a kayıt
var container = new UnityContainer();
container.RegisterInstance<IAuthService>(authService);
// Web API Yapılandırma
HttpConfiguration config = new HttpConfiguration();
config.DependencyResolver = new UnityResolver(container);
// Routing yapılandırma
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
// OWIN auth middleware
app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Active,
TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = ConfigurationManager.AppSettings["Jwt:Issuer"],
ValidAudience = ConfigurationManager.AppSettings["Jwt:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(ConfigurationManager.AppSettings["Jwt:SecurityKey"]))
}
});
app.UseWebApi(config);
}
}
SSS
Veritabanı nasıl oluşturulur?
OrhAuth, ilk kullanımda veritabanını otomatik olarak oluşturur (CreateDatabaseIfNotExists = true ayarı ile). Bu, Entity Framework'ün Code-First yaklaşımını kullanır.
Özel kullanıcı alanları nasıl eklenir?
ExtendUserAttribute
özniteliğini kullanarak User sınıfını genişleten bir sınıf oluşturun. OrhAuth, bu alanları otomatik olarak veritabanına ekleyecektir.
Token süreleri nasıl ayarlanır?
Token süreleri web.config'de veya OrhAuthOptions sınıfında belirtilebilir:
- TokenExpirationMinutes: Access token süresi (dakika cinsinden)
- RefreshTokenTTL: Refresh token süresi (gün cinsinden)
Birden fazla uygulama aynı OrhAuth veritabanını kullanabilir mi?
Evet, aynı bağlantı dizesini kullanarak birden fazla uygulama aynı kimlik doğrulama sistemine bağlanabilir.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET Framework | net472 is compatible. net48 was computed. net481 was computed. |
-
- EntityFramework (>= 6.4.4)
- Microsoft.IdentityModel.Tokens (>= 5.3.0)
- Microsoft.Owin (>= 4.2.2)
- Microsoft.Owin.Security (>= 4.2.2)
- Microsoft.Owin.Security.Jwt (>= 4.2.2)
- Microsoft.Owin.Security.OAuth (>= 4.2.2)
- Newtonsoft.Json (>= 13.0.1)
- System.IdentityModel.Tokens.Jwt (>= 5.3.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last Updated |
---|---|---|
1.1.7 | 150 | 6/22/2025 |
1.1.6 | 146 | 6/22/2025 |
1.1.5 | 149 | 6/22/2025 |
1.1.4 | 153 | 6/22/2025 |
1.1.3 | 116 | 5/30/2025 |
1.1.2 | 112 | 5/30/2025 |
1.1.1 | 170 | 4/10/2025 |
1.0.19 | 126 | 4/5/2025 |
1.0.18 | 157 | 3/17/2025 |
1.0.17 | 125 | 3/14/2025 |
1.0.16 | 159 | 3/13/2025 |
1.0.15 | 152 | 3/13/2025 |
1.0.14 | 165 | 3/12/2025 |
1.0.13 | 165 | 3/12/2025 |
1.0.12 | 171 | 3/9/2025 |
1.0.11 | 181 | 3/9/2025 |
1.0.10 | 141 | 3/9/2025 |
1.0.9 | 132 | 3/9/2025 |
1.0.8 | 150 | 3/8/2025 |
1.0.7 | 154 | 3/8/2025 |
1.0.6 | 142 | 3/8/2025 |
1.0.5 | 155 | 3/8/2025 |
1.0.4 | 160 | 3/8/2025 |
1.0.3 | 164 | 3/8/2025 |
1.0.2 | 173 | 3/8/2025 |
1.0.1 | 179 | 3/8/2025 |
1.0.0 | 219 | 3/7/2025 |
İlk sürüm