Ich versuche, einen Benutzer in Web-API ohne ihre Benutzername/Passwort-Kombination zu unterzeichnen. Ich habe Zugriff auf das Benutzerobjekt für den Benutzer, muss diese jedoch "anmelden" und das Zugriffstoken für nachfolgende Anforderungen an die Clientanwendung zurückgeben.WebAPI erhalten Zugang Token ohne Benutzername und Passwort
Ich habe versucht, Variationen über das folgende, aber ohne Glück, das UserManager
Objekt wird so bald angeordnet, wie ich GenerateUserIdentityAsync
das erste Mal aufrufen, die es für die cookiesIdentity
scheitern verursacht und seine mich warnen, dass mein Guss OAuthGrantResourceOwnerContextCredentials
ist ein " Verdächtige Typumwandlung oder Überprüfung "aber der Code erreicht diese Zeile nie; Dies ist, was ich versucht habe, die von der GrantResourceOwnerCredentials
Methode meiner ApplicationOAuthProvider
Klasse genommen und geändert wurde. Übrigens funktioniert mein Token-Endpunkt perfekt mit den üblichen username
, password
und grant_type
Anfragen.
var user = // Super secret way of getting the user....;
Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie);
// UserManager is not null at this point
var oAuthIdentity = await user.GenerateUserIdentityAsync(UserManager,
OAuthDefaults.AuthenticationType);
// UserManager is null at this point and so throws exception
var cookiesIdentity = await user.GenerateUserIdentityAsync(UserManager,
CookieAuthenticationDefaults.AuthenticationType);
var properties = ApplicationOAuthProvider.CreateProperties(user.UserName);
var ticket = new AuthenticationTicket(oAuthIdentity, properties);
((OAuthGrantResourceOwnerCredentialsContext)HttpContext.Current.GetOwinContext().Request.Context)
.Validated(ticket);
HttpContext.Current.GetOwinContext().Request.Context.Authentication.SignIn(cookiesIdentity);
Im Grunde alles, was ich tun möchte, ist ein Zugriffstoken für einen Benutzer zurückgeben, für die ich nicht habe den Benutzernamen und das Passwort, sondern ein „Geheimnis“, dass ich anstelle von Benutzername Passwort verwenden möchten. Gibt es einen Weg?