Quando si crea un nuovo progetto con autenticazione individuale in ASP.NET, la soluzione viene creata con un provider OAuth per gestire la richiesta di autenticazione.
Se si guarda la soluzione, si dovrebbe vedere una cartella Provider con una classe ApplicationOAuthProvider.
Questa classe implementa tutta la logica per autenticare i membri nel proprio sito Web. La configurazione è impostata all'avvio per consentire all'utente di personalizzare l'endpoint dell'URL tramite OAuthOption.
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider(PublicClientId),
AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
AllowInsecureHttp = true
};
Le proprietà Path TokenEndPoint definite l'url che sarà licenziato il metodo GrantResourceOwnerCredentials dei GrandResourceOwnerCredentials.
Se si utilizza Fiddler per autenticare e utilizzare questo tipo di corpo
grant_type=password&username=testUserName&password=TestPassword
si dovrebbe passare nel seguente metodo:
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
var userManager = context.OwinContext.GetUserManager<ApplicationUserManager>();
ApplicationUser user = await userManager.FindAsync(context.UserName, context.Password);
if (user == null)
{
context.SetError("invalid_grant", "The user name or password is incorrect.");
return;
}
ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(userManager,
OAuthDefaults.AuthenticationType);
ClaimsIdentity cookiesIdentity = await user.GenerateUserIdentityAsync(userManager,
CookieAuthenticationDefaults.AuthenticationType);
AuthenticationProperties properties = CreateProperties(user.UserName);
AuthenticationTicket ticket = new AuthenticationTicket(oAuthIdentity, properties);
context.Validated(ticket);
context.Request.Context.Authentication.SignIn(cookiesIdentity);
}
dove context.UserName e context.Password vengono impostate con il dati utilizzati nella richiesta. Dopo che l'identità è stata confermata (qui utilizzando Entity Framework e una coppia userName, Password in un database), un token Bearer viene inviato al chiamante. Questo token Bearer può quindi essere utilizzato per l'autenticazione per le altre chiamate.
Saluti.
Grazie per la risposta. Cancella tutto! – Joe
@Jeremie, grazie per averlo chiarito. Davvero un'ottima spiegazione e questo era il mio problema esatto. Qualcuno può dirmi se l'uso di questo token predefinito oauth bearer è il modo migliore e più sicuro per implementare la sicurezza nella tua API? Sono impegnato nello sviluppo di un'API che sarà esposta a Internet e utilizzata da un'app mobile angularjs su cui sto attualmente lavorando. Qualche altra alternativa? Molto apprezzato. – fransHbrink
@Jeremie, è possibile avere più URL endpoint che puntano tutti alla stessa applicazione IAppBuilder. In caso contrario, come possiamo avere più endpoint di toke in un'applicazione di API Web? – Jami