OAuth2 WebAPI дополнительные теги - PullRequest
0 голосов
/ 09 января 2020

Есть ли способ добавить дополнительные теги к результату json из OAuth? Прямо сейчас я получаю этот результат.

{
    "access_token": "...",
    "token_type": "bearer",
    "expires_in": 3599
}

Мне нужно добавить

 ".expires": "...",
  ".issued": "..."

Вот мой фрагмент кода:

public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
    return Task.Factory.StartNew(() =>
    {
        var username = context.UserName;
        var password = context.Password;
        var userService = new UserService();
        User user = userService.GetUserByCredentials(username, password);
        if (user != null)
        {
            var claims = new List<Claim>()
            {
                new Claim(ClaimTypes.Name, user.Name),
                new Claim("UserID", user.Id)
            };

            ClaimsIdentity oAutIdentity = new ClaimsIdentity(claims, Startup.OAuthOptions.AuthenticationType);
            context.Validated(new AuthenticationTicket(oAutIdentity, new AuthenticationProperties() { }));
        }
        else
        {
            context.SetError("invalid_grant", "Error");
        }
    });
}

Также это не не показывать мне дополнительные свойства, он должен возвращать фамилию, возраст, пол только в качестве примера.

public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
    {
        return Task.Factory.StartNew(() =>
        {
            var username = context.UserName;
            var password = context.Password;
            var userService = new UserService();
            User user = userService.GetUserByCredentials(username, password);
            if (user != null)
            {
                var claims = new List<Claim>()
                {
                    new Claim(ClaimTypes.Name, user.Name),
                    new Claim("UserID", user.Id)
                };

                var props = new AuthenticationProperties(new Dictionary<string, string>
                    {
                        {
                            "surname", "Smith"
                        },
                        {
                            "age", "20"
                        },
                        {
                        "gender", "Male"
                        }
                    });

                ClaimsIdentity oAutIdentity = new ClaimsIdentity(claims, Startup.OAuthOptions.AuthenticationType);
                //context.Validated(new AuthenticationTicket(oAutIdentity, new AuthenticationProperties() { }));
                var ticket = new AuthenticationTicket(oAutIdentity, props);
                context.Validated(ticket);

            }
            else
            {
                context.SetError("invalid_grant", "Error");
            }
        });
    }

Большая часть моего кода с этого сайта. https://olepetterdahlmann.com/2016/08/08/implement-an-oauth-2-0-authorization-server-using-owin-oauth-middleware-on-asp-net-web-api/

1 Ответ

0 голосов
/ 09 января 2020

Да, вы можете сделать это следующим образом:

var customProperties = new Dictionary<string, string>();
customProperties.Add("as:client_id", context.ClientId ?? string.Empty);
customProperties.Add("user_roles", user_roles);
customProperties.Add("user_timezone", timeZoneName);
customProperties.Add("user_country", account.CountryCode ?? string.Empty);

AuthenticationProperties properties = new AuthenticationProperties(customProperties);
AuthenticationTicket ticket = new AuthenticationTicket(identity, properties);
context.Validated(ticket);

Спасибо

...