更改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
,它有一个带有.发出和.过期键的属性字典。但是,尝试更改这些值是没有效果的。
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);
}
}