如何重命名 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
在您的代码中,覆盖 OAuthAuthorizationServerProvider
的 TokenEndpoint
方法是最好的方法。
来自 /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
在您的代码中,覆盖 OAuthAuthorizationServerProvider
的 TokenEndpoint
方法是最好的方法。