OWIN在响应中添加额外的参数

时间:2018-10-12 00:50:28

标签: asp.net-web-api owin

我正在使用Owin在ASP.NET中编写一个API端点,它工作正常,现在我想进行一些更改。

我要做的第一件事是添加一个新的授权类型,例如,我要使用grant_type = xyz,目前是密码。

第二件事是,我想在响应正文中添加额外的参数,例如当前它具有“ access_token”,“ token_type”和“ expires_in”,并且我想添加“ organization_name”和“ 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 :(得分:0)

注意:这可以回答有关发送自定义数据作为响应的一半问题。

您可以使用自定义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");
                }

            });
        }