Próbuję wprowadzić autoryzację tokena na okaziciela OWIN i na podstawie this article. Jest jednak jeszcze jedna dodatkowa informacja, której potrzebuję w torze na okaziciela, którego nie wiem, jak ją wprowadzić.Dodawanie dodatkowej logiki do autoryzacji na okaziciela
W mojej aplikacji muszę wydedukować informacje o użytkowniku tokena właściciela (np. Identyfikator użytkownika). Jest to ważne, ponieważ nie chcę, aby upoważniony użytkownik mógł działać jako inny użytkownik. Czy to jest wykonalne? Czy to nawet właściwe podejście? Jeśli identyfikator użytkownika to GUID, byłoby to proste. W tym przypadku jest liczbą całkowitą. Autoryzowany użytkownik może potencjalnie podszyć się pod inną osobę tylko przez zgadywanie/brutalną siłę, co jest niedopuszczalne.
Patrząc na ten kod:
public void ConfigureOAuth(IAppBuilder app)
{
OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
Provider = new SimpleAuthorizationServerProvider()
};
// Token Generation
app.UseOAuthAuthorizationServer(OAuthServerOptions);
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
}
public class SimpleAuthorizationServerProvider : 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[] { "*" });
using (AuthRepository _repo = new AuthRepository())
{
IdentityUser user = await _repo.FindUser(context.UserName, context.Password);
if (user == null)
{
context.SetError("invalid_grant", "The user name or password is incorrect.");
return;
}
}
var identity = new ClaimsIdentity(context.Options.AuthenticationType);
identity.AddClaim(new Claim("sub", context.UserName));
identity.AddClaim(new Claim("role", "user"));
context.Validated(identity);
}
}
Myślę, że jest możliwe, aby zastąpić autoryzacji/uwierzytelnienia, aby pomieścić co potrzebne?
można użyć następujących czynności, aby uzyskać identyfikator użytkownika od użytkownika http://stackoverflow.com/a/19506296/299327. –