如何重命名 Web Api Bearer Token“.expires”密钥?

How can I rename Web Api Bearer Token ".expires" key?

来自 /Token 的响应 returns 一个看起来像这样的负载:

"access_token":"foo",
"token_type":"bearer",
"expires_in":59,
"refresh_token":"bar",
".issued":"Sat, 17 Sep 2016 00:13:21 GMT",
".expires":"Sat, 17 Sep 2016 00:14:21 GMT"

.issued 和 .expired 的命名方式是否有原因?这些是无效的 JavaScript 属性,因此我打算重命名它们。如果除了像这样覆盖 TokenEndpoint 方法之外还有更优雅的方法来做到这一点:

public override Task TokenEndpoint(OAuthTokenEndpointContext context)
{
    foreach (KeyValuePair<string, string> property in context.Properties.Dictionary)
    {
        string key = property.Key;
        switch (key)
        {
            case ".expires":
                key = "expires";
                break;
            case ".issued":
                key = "issued";
                break;
        }
        context.AdditionalResponseParameters.Add(key, property.Value);
    }
    return Task.FromResult<object>(null);
}

我为什么要这样做的一个例子。我喜欢提供一个 TypeScript 接口来模拟我希望从请求中收到的数据。在这种情况下,我的界面如下所示:

interface IToken {
    .expires: string;        // Not valid TypeScript
    .issued: string;         // Not valid TypeScript
    access_token: string;
    expires_in: number;
    token_type: string;
    refresh_token: string;
}

在不更改我的 API 中的 属性 的情况下,我和其他使用我的 API 的人被迫使用像 tokenVar[".expires"][=16= 这样的魔术字符串来访问这些属性]

我认为没有特定的理由这样做。这只是另一个常量。请参阅 AuthenticationProperties.cs 此处 https://github.com/jchannon/katanaproject/blob/master/src/Microsoft.Owin/Security/AuthenticationProperties.cs

在您的代码中,覆盖 OAuthAuthorizationServerProviderTokenEndpoint 方法是最好的方法。