Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在与ADFS 2.0联合时正确设置超时_C#_Wif_Adfs2.0 - Fatal编程技术网

C# 如何在与ADFS 2.0联合时正确设置超时

C# 如何在与ADFS 2.0联合时正确设置超时,c#,wif,adfs2.0,C#,Wif,Adfs2.0,我使用ADFS2.0已经有相当一段时间了,我知道事情是如何运作的。我已经做了十几个自定义RPs、自定义STSE以及使用ADF作为依赖STS 然而,我有一个简单的要求,我仍然未能满足 我希望我的用户在一段固定时间后被强制重新登录。假设1分钟,用于测试目的 首先,我在RPs方面做了一些修正。似乎出于未知原因,RP保留会话,即使令牌的validTo指向了时间。这与Vittorio Bertocci在他的书(第123页)中所说的相矛盾,他在书中展示了如何执行滑动过期-他说“SessionAuthenti

我使用ADFS2.0已经有相当一段时间了,我知道事情是如何运作的。我已经做了十几个自定义RPs、自定义STSE以及使用ADF作为依赖STS

然而,我有一个简单的要求,我仍然未能满足

我希望我的用户在一段固定时间后被强制重新登录。假设1分钟,用于测试目的

首先,我在RPs方面做了一些修正。似乎出于未知原因,RP保留会话,即使令牌的
validTo
指向了时间。这与Vittorio Bertocci在他的书(第123页)中所说的相矛盾,他在书中展示了如何执行滑动过期-他说“SessionAuthenticationModule将在之后立即处理过期的会话”。好吧,对我来说不是,但是我在这里发现了一个窍门——看看“如果”条款:

使用
Get-ADFSRelyingPartyTrust
我可以看到它被设置为1(我甚至在我的页面上打印令牌
validTo
,以确认设置正确)

然后我使用
ADFS SetProperties
设置ADFS属性:

ADFS-SetProperties -SsoLifetime 1
ADFS-SetProperties -ReplyCacheExpirationInterval 1
ADFS-SetProperties -SamlMessageDeliveryWindow 1
但还是没有运气。我现在卡住了

该场景适用于我的自定义STS,其中STS会话的有效性基于表单cookie-如果我将STS的表单cookie超时设置为1,则在我的RP应用程序内1分钟不活动后,我将被重定向到RP的登录页面,然后重定向到显示其登录页面的STS

但是,ADFS 2.0并非如此。在一分钟的不活动之后,我被重定向到RP的登录页面,该页面将重定向到ADFS的登录页面,该页面将愉快地重定向回来,就像会话在ADFS中仍然处于活动状态一样

我希望有人:

(1) 看看上面描述的黑客攻击,并解释为什么过期的令牌不会被自动拒绝,并且需要这种丑陋的黑客攻击

(2) 解释如何在ADFS 2.0端正确超时会话,以便使用登录页保护续订令牌的请求

提前谢谢

编辑

我可以确认,将上述所有参数设置为1分钟会使ADFS会话在5分钟(或更长)后无效。这是一个错误,看来要么我犯了一个基本的错误,要么5分钟是最小的可接受值

我的(2)来自上面,现在只是为了确认和解释我的观察。

根据上面的评论(与OP共同努力),实例上的属性应设置为0


根据这一点,IP/STS将在用户发出令牌之前重新提示用户进行身份验证。

您也可以尝试将ADF从windows集成身份验证更改为基于表单的身份验证。您可能仍然需要使用freshness属性,但现在您的用户必须输入他们的凭据,即使他们与您的广告位于同一网络上

本文非常简单地解释了这一点:


设置TokenLifetime值不起作用,这很奇怪。通过分配令牌生存期值,将超时解释为直接设置。我想知道MSDN中描述的设置是否正确。如果这没有帮助,那么是时候修改那篇文章了。希望这将对那些面临此问题的人有很大帮助。

从我的观点来看,您提供的信息不足以提供帮助(尽管您提供了很多信息),因为超时行为取决于许多不同部分(STS、RP…)的设置以及如何实现这些设置。。。由于您使用了大量定制产品,因此必须进行大量推测:-(@Yahia:谢谢你的关注。你看,那里没有定制组件。它是ADFS 2.0,开箱即用,在RPs端使用WIF。在我看来,没有投机的余地。然后我假设我已经做了十几个定制RPs、定制STS,并且错误地将ADFS用作依赖STS。好的。我要指出的是我不是这个领域的新手,我需要一个非常具体的指导。这可能是一个正确的轨道。将它设置为1没有帮助,但是根据文档(),“如果指定为“0”,则表示IP/STS请求在颁发令牌之前重新提示用户进行身份验证。”猜猜看,0工作正常!我明天再确认。再次感谢。我已接受答案并将奖金授予它。不客气:-)根据这一行为,似乎是经过设计的——引用:为了确保用户体验良好,用户应该只在登录到工作站时输入用户名和密码;用户在访问多个客户端时不应该多次重新输入用户名和密码。这就是为什么我需要更多的
令牌寿命
SSO生命周期
参数。将它们设置为1可能会产生我观察到的错误行为,但将它们设置为20分钟会使其行为正确。我只是希望如此。感谢您的评论。我没有明确说明这一点,但我们的ADFSE始终设置为forms auth。谢谢,即使问题有点复杂e有点老。据我所知,将TokenLifetime设置为1分钟不是一个好主意,但我还记得大于5分钟的值是正确的。感谢您的及时回复。这当然是一个有用的提示。我将尝试一下,并确认是否有任何差异。
Set-ADFSRelyingPartyTrust -Targetname "myrpname" -TokenLifetime 1
ADFS-SetProperties -SsoLifetime 1
ADFS-SetProperties -ReplyCacheExpirationInterval 1
ADFS-SetProperties -SamlMessageDeliveryWindow 1