owin oauth zusätzliche Parameter senden

Ich bin mir sicher das ist möglich aber nicht sicher wie man das erreicht. Ich habe eine OWIN OAUTH-Implementierung, die derzeit den Benutzernamen und das Kennwort akzeptiert und sie anhand einer Datenbank authentifiziert. Ich möchte dies erweitern, um eine SmartCard-Uid zur Unterstützung der einmaligen Anmeldung mit einer SmartCard zu übergeben.

Kann ich beim OWIN Login zusätzliche Parameter übergeben und wenn ja wie? Die Grundvoraussetzung ist, dass sich ein Benutzer mit einer Kombination aus Benutzername und Kennwort oder einer SmartCard-UID anmelden kann (wenn eine SmartCard-UID übergeben wird und diese in der Datenbank gefunden wird, meldet die Anwendung den Benutzer an).

Ich übergebe geradeusername, password undgrant_type und ich möchte hinzufügenuid zu dieser Liste und holen Sie sich das in der myAuthorizationServiceProvider.

Ich kann es sehenUserName, Password undClientId auf derOAuthGrantResourceOwnerCredentialsContext aber ich kann keine anderen Eigenschaften sehen, die das unterstützen, was ich versuche zu erreichen.

Das ist, was ich derzeit in meinem Dienstanbieter habe

    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, Uid auch aus dem Kontext zu holen, kann aber trotzdem nicht erkennen, dass dies erreicht wird. Jede Hilfe wird sehr geschätzt.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage