来自/ Token的响应返回如下所示的有效负载:
"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"]
这样的魔术字符串来访问这些属性
答案 0 :(得分:1)
我认为没有具体的理由这样做。这只是另一个使用的常量。请参阅此处的AuthenticationProperties.cs https://github.com/jchannon/katanaproject/blob/master/src/Microsoft.Owin/Security/AuthenticationProperties.cs
正如您的代码覆盖TokenEndpoint
OAuthAuthorizationServerProvider
方法一样,这是最好的方法。