0

我正在尝试在我的单页应用程序中从 ADFS 的 oauth2 端点接收 JWT 令牌。我成功地收到了来自 oauth2 端点的代码。在 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设置为 2 分钟,将 TokenLifetime 设置为 60 分钟,希望 AD FS 开始发送 nbf 声明。但我错了,没有任何帮助。

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

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

4

1 回答 1

1

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

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

于 2016-03-01T10:03:27.280 回答