я могу видеть, как генерировать маркеры, используя следующий код , как описано вкакая функция делает owin именно для генерации токена; Могут ли быть использованы?
http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/
OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
Provider = new SimpleAuthorizationServerProvider()
};
// Token Generation
app.UseOAuthAuthorizationServer(OAuthServerOptions);
var bearerAuth = new OAuthBearerAuthenticationOptions()
{
Provider = new OAuthBearerAuthenticationProvider()
};
app.UseOAuthBearerAuthentication(bearerAuth);
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[] { "*" });
var manager = new UserManager<User, long>(new UserStore(new UserRepository()));
var user = await manager.FindAsync(context.UserName, context.Password);
if (user == null)
{
context.SetError("invalid_grant", "The user name or password is incorrect.");
}
else
{
var identity = new ClaimsIdentity(context.Options.AuthenticationType);
identity.AddClaim(new Claim("name",user.Email));
context.Validated(identity);
}
}
}
Как потребитель я делаю REST вызов http://localhost:9000/token со своими учетными данными и magically
получить маркер доступа
Я хотел бы иметь возможность использовать эту функцию генерации токена для использования в других сценариях, чтобы вручную создать токен, который был бы действителен для сервера OWIN **this particular**
.
Во-вторых, возможно ли иметь несколько поставщиков авторизации, которые могут быть условно использованы этим сервером. Если да, то как это сделать, не используя генератор токенов с нуля (например, внешний материал для входа)?
Примечание: GUID является ** НЕ ** криптографически защищенным – zerkms
Благодарю вас, я не решался использовать это, даже если его в официальных руководствах MS. Знаете ли вы какие-нибудь лучшие способы? – heyNow
Обратите внимание, что этот код является _not_ генерированием токена доступа в «SetToken». Он генерирует код для использования с типом предоставления кода авторизации OAuth. https://tools.ietf.org/html/rfc6749#section-4.1 – Daniel