Web API身份验证响应属性

本文关键字:属性 响应 身份验证 API Web | 更新日期: 2023-09-27 18:28:02

我正在使用ASP.NET web API开发web服务。我正在使用ASP.NET Identity进行身份验证和生成令牌。我需要在令牌响应json中返回一个扩展属性。到目前为止,我可以返回一个扩展字符串属性,在该属性中,我将发送一个json字符串,该字符串是通过将自定义类对象序列化为json而获得的。以下是我的身份验证提供者代码:

public class ApplicationOAuthProvider : OAuthAuthorizationServerProvider
{
    public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
    {
        await Task.Run(() =>
        {
            context.Validated();
        });            
    }
    public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
    {
        await Task.Run(() =>
        {
            var loginResponse = new AccountManager().Login(context.UserName, context.Password);
            if (loginResponse == null)
            {
                context.SetError("invalid_grant", Resources.Messages.InvalidGrant);
                return;
            }
            var identity = new ClaimsIdentity(context.Options.AuthenticationType);
            IDictionary<string, string> data = new Dictionary<string, string>
            {
                { "userData", JsonConvert.SerializeObject(loginResponse) }
            };
            AuthenticationProperties properties = new AuthenticationProperties(data);
            Microsoft.Owin.Security.AuthenticationTicket ticket = new Microsoft.Owin.Security.AuthenticationTicket(identity, properties);
            context.Validated(ticket);
        });            
    }
    public override Task TokenEndpoint(OAuthTokenEndpointContext context)
    {
        foreach (KeyValuePair<string, string> property in context.Properties.Dictionary)
        {
            context.AdditionalResponseParameters.Add(property.Key, property.Value);
        }
        return Task.FromResult<object>(null);
    }
}

现在,在我的响应中,我有一个属性,例如"userData" : "<Json String>",而我想为userData分配一个json对象(而不是json字符串)。有可能吗?

Web API身份验证响应属性

我不建议将JSON对象放在票证属性中,这将大大增加令牌大小,并且您将在每次请求时传输此令牌。如果您在获得访问令牌后定义受保护的独立端点来执行此任务,可能会更好。成功登录后,您将发出额外的Get请求,但您将保持令牌大小最小化。