OWIN добавить дополнительные параметры в ответ - PullRequest
0 голосов
/ 12 октября 2018

Я пишу конечную точку API в ASP.NET, используя Owin, она работает нормально, и теперь я хочу внести некоторые изменения.

Первое, что я хочу сделать, это добавить новый тип гранта,например, я хочу использовать grant_type = xyz, и в настоящее время это пароль.

Во-вторых, я хочу добавить дополнительные параметры в тело ответа, например, в настоящее время оно имеет «access_token», «token_type» и «expires_in ", и я хочу добавить" имя_организации "и" Developer.email "

enter image description here

Я пытаюсь добавить промежуточное ПО, но не знаюКак добавить параметры в ответ.

Я также пробовал этот код в методе GrantResourceOwnerCredentials, но вывод неправильный JSON.

var jsonString = "{\"foo\":1,\"bar\":false}";
byte[] data = Encoding.UTF8.GetBytes(jsonString);
context.Response.ContentType = "application/json";
context.Response.Body.WriteAsync(data, 0, data.Length);

enter image description here

1 Ответ

0 голосов
/ 28 октября 2018

Примечание : ответ на половину вашего вопроса об отправке пользовательских данных в ответ.

Вы можете использовать пользовательский OAuthAuthorizationServerProvider и манипулировать ответом следующим образом.

 public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
        {
            return Task.Factory.StartNew(() =>
            {
                var userName = context.UserName;
                var password = context.Password;
                var userService = new UserService();
                var user = userService.Validate(userName, password);
                if (user != null)
                {
                    var claims = new List<Claim>()
            {
                new Claim(ClaimTypes.Sid, Convert.ToString(user.Id)),
                new Claim(ClaimTypes.Name, user.Name),
                new Claim(ClaimTypes.Email, user.Email),
                };

                    var data = new Dictionary<string, string>
            {
                { "userName", user.Name },
                 { "ExtraPara","ExtraData"},
                 { "developer","Abdul"}
            };
                    var properties = new AuthenticationProperties(data);

                    ClaimsIdentity oAuthIdentity = new ClaimsIdentity(claims,
                        Startup.OAuthOptions.AuthenticationType);

                    var ticket = new AuthenticationTicket(oAuthIdentity, properties);
                    context.Validated(ticket);
                }
                else
                {
                    context.SetError("invalid_grant", "Either email or password is incorrect");
                }

            });
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...