如何强制 AD FS 3.0 (Windows 2012 R2) 在 jwt 中发送 nbf(不是之前)

How to force AD FS 3.0 (Windows 2012 R2) to send nbf (not before) in jwt

我试图在我的单页应用程序中从 ADFS 的 oauth2 端点接收 JWT 令牌。我从 oauth2 端点成功收到 code。在 ajax POST 请求后,我收到了 access_tokenrefresh_token。但是当我查看 access_token 时,我只有这些说法:

{
  "aud": "https://localhost/",
  "iss": "http://fs.development.org/adfs/services/trust",
  "iat": 1438015081,
  "exp": 1438018681,
  "email": "Test.User@development.org",
  "role": "Domain Users",
  "unique_name": "Test.User",
  "primarysid": "S-x-x-xx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxxx-xxxx",
  "upn": "test.user@development.org",
  "auth_time": "2015-07-27T16:40:01.636Z",
  "authmethod": "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport",
  "ver": "1.0",
  "appid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

如您所见,我没有收到来自 AD FS 的 nbf 声明。我在依赖方信任的配置中找不到它。我尝试将 属性 NotBeforeSkew 设置为两分钟,将 TokenLifetime 设置为我的依赖方的 60 分钟,希望 AD FS 开始发送 nbf宣称。但我错了,没有任何帮助。

所以我的问题是这样的。可以从我的应用程序或 ad fs 服务器强制发送 nbf 声明吗?

也许这只是配置问题,但我无法从文档中推断出如何配置此声明。

我发现解决此问题的唯一方法是向 ADFS 添加自定义声明规则。这感觉有点像 hack,但我只是将 'nbf' 设置为零,这样任何消费者至少不会抱怨缺少 属性。尽管 'nbf' 实际上是可选的,但 Sharepoint 2013 在使用 OAuth 时似乎认为它是强制性的,这是我需要提供一些价值的最初原因。这是我为遇到此问题的任何人定制的索赔规则:

c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"] => issue(Type = "nbf", Value = "0");