更改OWIN .expiration和.签发日期的DateTime格式

本文关键字:日期 DateTime 格式 OWIN expiration 更改 | 更新日期: 2023-09-27 18:08:03

在创建. net Web API starter模板(如这里所述)时,我从"Individual User Accounts"身份验证选项开始。令牌正在正确生成,但是"。发出"answers"。expires"属性为非iso日期格式。我如何用DateTime.UtcNow.ToString("o")格式化它们,使其符合ISO 8601标准?

{
  "access_token": "xxx",
  "token_type": "bearer",
  "expires_in": 1199,
  "userName": "foo@bar.com",
  "Id": "55ab2c33-6c44-4181-a24f-2b1ce044d981",
  ".issued": "Thu, 13 Aug 2015 23:08:11 GMT",
  ".expires": "Thu, 13 Aug 2015 23:28:11 GMT"
}

模板使用一个自定义的OAuthAuthorizationServerProvider,并提供一个钩子来添加额外的属性到输出令牌('Id'和'userName'是我的道具),但我没有看到任何方法来改变现有的属性。

我确实注意到,在TokenEndpoint的覆盖中,我得到了一个OAuthTokenEndpointContext,它有一个带有.发出和.过期键的属性字典。但是,尝试更改这些值是没有效果的。

更改OWIN .expiration和.签发日期的DateTime格式

AuthenticationProperties类在Microsoft.Owin.dll中的Microsoft.Owin.Security命名空间中定义。

IssuedUtc属性的setter完成以下操作(对于ExpiresUtc也是类似的):

this._dictionary[".issued"] = value.Value.ToString("r", (IFormatProvider) CultureInfo.InvariantCulture);

可以看到,当设置IssuedUtc时,字典的.issued字段也被设置,并且是"r"格式。

您可以尝试在TokenEndPoint方法中执行以下操作:

foreach (KeyValuePair<string, string> property in context.Properties.Dictionary)
{
    if (property.Key == ".issued")
    {
        context.AdditionalResponseParameters.Add(property.Key, context.Properties.IssuedUtc.Value.ToString("o", (IFormatProvider) CultureInfo.InvariantCulture));
    }
    else if (property.Key == ".expires")
    {
        context.AdditionalResponseParameters.Add(property.Key, context.Properties.ExpiresUtc.Value.ToString("o", (IFormatProvider) CultureInfo.InvariantCulture));
    }
    else
    {
        context.AdditionalResponseParameters.Add(property.Key, property.Value);
    }
}