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 usernamepassword und grant_type - und ich möchte hinzufügen uid zu dieser Liste und pick, dass bis in die meine AuthorizationServiceProvider.

Kann ich sehen UserNamePassword 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

Schreibe einen Kommentar