2016-09-17 45 views
2

从/令牌的响应返回一个有效载荷,看起来是这样的:如何重命名Web Api承载令牌“.expires”键?

"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"]

回答

1

使用魔法字符串这些属性我不知道认为有一个具体的理由来做到这一点。这只是另一个常用的。请参阅此处的AuthenticationProperties.cs https://github.com/jchannon/katanaproject/blob/master/src/Microsoft.Owin/Security/AuthenticationProperties.cs

由于在您的代码覆盖TokenEndpoint方法OAuthAuthorizationServerProvider是最好的方法来解决它。

+0

我编辑了我的问题,提供了一个为什么我想要这样做的例子。 –

+0

是的,我了解这一部分,但正如我所提到的,重写'TokenEndpoint'是唯一的方法去做它,你已经在做。 –