我正在使用Owin在ASP.NET中编写一个API端点,它工作正常,现在我想进行一些更改。
我要做的第一件事是添加一个新的授权类型,例如,我要使用grant_type = xyz,目前是密码。
第二件事是,我想在响应正文中添加额外的参数,例如当前它具有“ access_token”,“ token_type”和“ expires_in”,并且我想添加“ organization_name”和“ Developer.email” >
我正在尝试添加中间件,但是不知道如何添加参数。
我也曾在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);
答案 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");
}
});
}