आप कहते हैं:
I want to implement a login/registration system (so that I can implement roles and permissions in the future, and restrict certain API requests).
How do I setup authentication in a Web API 2 application, having an existing user entity?
यह निश्चित रूप से मतलब है कि आप क्या नहीं जरूरत ASP.NET पहचान। एएसपी.नेट पहचान सभी उपयोगकर्ताओं की सामग्री को संभालने के लिए एक तकनीक है। यह वास्तव में प्रमाणीकरण तंत्र "बना" नहीं करता है। एएसपी.नेट पहचान ओविन प्रमाणीकरण तंत्र का उपयोग करती है, जो एक और चीज है।
क्या आप देख रहे हैं , लेकिन "अपने मौजूदा उपयोगकर्ता की मेज के साथ ASP.NET पहचान का उपयोग कैसे करें"
Owin उपयोग करने के लिए "कैसे Owin प्रमाणीकरण अपने मौजूदा उपयोगकर्ता तालिका का उपयोग कर कॉन्फ़िगर करने के लिए" नहीं है प्रमाणीकरण के लिए निम्न चरणों का पालन करें:
संकुल स्थापित करें:
Owin
Microsoft.AspNet.Cors
Microsoft.AspNet.WebApi.Client
Microsoft.AspNet.WebApi.Core
Microsoft.AspNet.WebApi.Owin
Microsoft.AspNet.WebApi.WebHost
Microsoft.Owin
Microsoft.Owin.Host.SystemWeb
Microsoft.Owin.Security
Microsoft.Owin.Security.OAuth
रूट फ़ोल्डर के अंदर Startup.cs
फ़ाइल बनाएँ (examp le): सही तरीके से कॉन्फ़िगर
[assembly: OwinStartup(typeof(YourProject.Startup))]
namespace YourProject
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
var config = new HttpConfiguration();
//other configurations
ConfigureOAuth(app);
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
app.UseWebApi(config);
}
public void ConfigureOAuth(IAppBuilder app)
{
var oAuthServerOptions = new OAuthAuthorizationServerOptions()
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/api/security/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromHours(2),
Provider = new AuthorizationServerProvider()
};
app.UseOAuthAuthorizationServer(oAuthServerOptions);
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
}
}
public class AuthorizationServerProvider : OAuthAuthorizationServerProvider
{
public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
context.Validated();
}
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
try
{
//retrieve your user from database. ex:
var user = await userService.Authenticate(context.UserName, context.Password);
var identity = new ClaimsIdentity(context.Options.AuthenticationType);
identity.AddClaim(new Claim(ClaimTypes.Name, user.Name));
identity.AddClaim(new Claim(ClaimTypes.Email, user.Email));
//roles example
var rolesTechnicalNamesUser = new List<string>();
if (user.Roles != null)
{
rolesTechnicalNamesUser = user.Roles.Select(x => x.TechnicalName).ToList();
foreach (var role in user.Roles)
identity.AddClaim(new Claim(ClaimTypes.Role, role.TechnicalName));
}
var principal = new GenericPrincipal(identity, rolesTechnicalNamesUser.ToArray());
Thread.CurrentPrincipal = principal;
context.Validated(identity);
}
catch (Exception ex)
{
context.SetError("invalid_grant", "message");
}
}
}
}
उपयोग कार्यों को अधिकृत करने के [Authorize]
विशेषता:
सुनिश्चित करें कि [OwinStartup विधानसभा] बनाते हैं।
api/security/token
GrantType
, UserName
, और Password
को भालू टोकन प्राप्त करने के लिए कॉल करें। इस तरह:
"grant_type=password&username=" + username + "&password=" password;
Bearer "YOURTOKENHERE"
रूप HttpHeader Authorization
भीतर टोकन भेजें। इस तरह:
headers: { 'Authorization': 'Bearer ' + token }
उम्मीद है कि यह मदद करता है!
धन्यवाद, यही वह है जिसे मैं ढूंढ रहा था। क्षमा करें अगर मेरा प्रश्न अस्पष्ट था, लेकिन मैं एएसपी.NET पहचान की "भूमिका" से उलझन में था। –
आपका स्वागत है दोस्त। यदि आपको कार्यान्वयन पर कुछ परेशानी है, तो यहां टिप्पणी करने में संकोच न करें –
अरे, क्या आप मुझे बता सकते हैं कि उपरोक्त कोड में उपयोगकर्ता सेवा ऑब्जेक्ट क्या होगा? बस एक कस्टम क्लास ऑब्जेक्ट जो मेरे डीबी संदर्भ से कनेक्ट होगा और मेरे कस्टम उपयोगकर्ता को डीबी से वापस कर देगा? उपयोगकर्ता को IUser या कुछ भी के बाद वारिस नहीं करना है? – Savail