owin oauth senden zusätzlicher Parameter
Ich bin sicher, das ist möglich, aber nicht sicher, wie Sie zu erreichen. Ich habe eine OWIN OAUTH-Implementierung, die derzeit akzeptiert der Nutzer Benutzername und Passwort und authentifiziert diese gegen eine Datenbank. Ich erweitern möchte, um diese zu passieren, in einem SmartCard-Uid zur Unterstützung von single-sign-on mit SmartCard.
Kann ich den pass in der zusätzlichen Parameter in der OWIN-Anmeldung und wenn ja, wie? Die grundlegende Prämisse ist, dass ein Benutzer-login mit Benutzername/Passwort-Kombination Oder ein SmartCard-uid (wenn die übergabe eines SmartCard-uid und dass in der Datenbank gefunden wird, dann die Anwendung Logt sich der Benutzer in)
Ich bin derzeit auf der Durchreise zu username
password
und grant_type
- und ich möchte hinzufügen uid
zu dieser Liste und pick, dass bis in die meine AuthorizationServiceProvider
.
Kann ich sehen UserName
Password
und ClientId
auf die OAuthGrantResourceOwnerCredentialsContext
aber ich kann nicht sehen, alle anderen Eigenschaften, die das unterstützen würden, was ich bin versucht zu erreichen.
Dies ist, was ich derzeit habe in meinem service-provider
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
var user = await this._userService.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(ClaimTypes.Sid, user.Id.ToString()));
identity.AddClaim(new Claim(ClaimTypes.Role, "user"));
identity.AddClaim(new Claim("sub", context.UserName));
var secretKeyBytes = Encoding.UTF8.GetBytes(user.PasswordHash);
var props =
new AuthenticationProperties(
new Dictionary<string, string>
{
{ "dm:appid", user.Id.ToString() },
{ "dm:apikey", Convert.ToBase64String(secretKeyBytes) }
});
var ticket = new AuthenticationTicket(identity, props);
context.Validated(ticket);
}
Ich möchte in der Lage sein zu bekommen, wird die Uid aus dem Kontext, aber nicht sehen können, trotzdem dies zu erreichen, jede Hilfe wird sehr geschätzt.
InformationsquelleAutor der Frage Neil Stevens | 2015-07-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Implementieren Sie
ValidateClientAuthentication
wenn Sie das noch nicht getan.Dies ist der Ort, wo Sie sollten überprüfen Sie Ihre client.
In diesem Verfahren werden Sie tun, irgendeine Art von Validierung Ihrer Kunden und setzen Sie die Objekte/Variablen, die gelesen werden können in
GrantResourceOwnerCredentials
.erhält eine
OAuthValidateClientAuthenticationContext
enthält, die den zusätzlichen Bereich(en) sind Sie dann vorbei, wenn die Buchung auf Ihrem authorization server.In dem Bild oben habe ich einen zusätzlichen parameter
uid
auf der 4. position.Bevor Sie überprüfen Ihr Kontext:
können Sie Ihre variable/Objekt:
Nun, in Ihrem
GrantResourceOwnerCredentials
Sie können Lesen Sie einfach den Wert, und verwenden Sie es:Wenn Sie mehr erfahren wollen, können Sie einen Blick auf dieses github repositorywo ich ein Objekt übergeben:
Wenn Sie downloaden die gesamte Lösung können Sie es testen, mit einem javascript - /jquery-client.
UPDATE:
Würde man einen zusätzlichen parameter (IE: uid) in Ihrer http POST-Anforderung:
Vanilla Js:
jQuery:
InformationsquelleAutor der Antwort LeftyX