我一直在使用ADFS在VS中使用声明感知模板对AD进行身份验证.我们的一些用户将不在Active Directory中,因此我想知道是否可以配置ADFS以便为这些用户查找SQL Server,然后继续正常运行.
是一个类似的问题,只有一个人说是的,它可以做,而其他人说你做不到.
我在使用ADFS2来保护从Passively Federated网站调用的后端WCF服务时遇到问题.我有被动联盟在网站上工作,但后端服务给我带来了问题.
拼图的碎片.
后端服务配置:
我使用行为扩展将WIF合并到管道中.
<ws2007FederationHttpBinding>
<binding name="WS2007FederationHttpBinding_IQuoteService">
<security mode="TransportWithMessageCredential">
<message establishSecurityContext="false">
<issuer address="https://myADFSserver/adfs/services/trust/13/issuedtokenmixedsymmetricbasic256">
</issuer>
<issuerMetadata address="https://myADFSserver/adfs/services/trust/mex">
</issuerMetadata>
</message>
</security>
</binding>
</ws2007FederationHttpBinding>
<behaviors>
<serviceBehaviors>
<behavior name="">
<federatedServiceHostConfiguration name="Service.QuoteService" />
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
<serviceCredentials>
<serviceCertificate findValue="000000000000000000000000000000" storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="Service.QuoteService">
<endpoint address="" binding="ws2007FederationHttpBinding" contract="Service.IQuoteService" bindingConfiguration="WS2007FederationHttpBinding_IQuoteService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
Run Code Online (Sandbox Code Playgroud)
客户端配置
使用"添加服务引用"工具添加服务时,将在客户端上创建以下配置:
<customBinding>
<binding name="https://myADFSserver/adfs/services/trust/13/issuedtokenmixedsymmetricbasic256">
<security defaultAlgorithmSuite="Default" authenticationMode="IssuedTokenOverTransport"
requireDerivedKeys="false" securityHeaderLayout="Strict" …
Run Code Online (Sandbox Code Playgroud) 我可以将adfs2与java应用程序一起使用吗?我想在java中实现单点登录.我读过一些他们提到过你需要.net框架的文章.
我很想知道ADFS 2.0超时场景中Freshness Value,TokenLifetime和WebSSOLifetime参数之间的关系.我已经对此做了一些分析,我还没有得到清晰的图片.
我在我的MVC 4应用程序中使用ACS 2.0.
它已配置为登录,它适用于各种提供程序,包括ADFS.我需要实现注销功能.
这是它的样子:
// Load Identity Configuration
FederationConfiguration config = FederatedAuthentication.FederationConfiguration;
// Get wtrealm from WsFederationConfiguation Section
string wtrealm = config.WsFederationConfiguration.Realm;
string wreply = wtrealm; //return url
// Read the ACS Ws-Federation endpoint from web.Config
string wsFederationEndpoint = ConfigurationManager.AppSettings["ida:Issuer"];
SignOutRequestMessage signoutRequestMessage = new SignOutRequestMessage(new Uri(wsFederationEndpoint));
signoutRequestMessage.Parameters.Add("wreply", wreply);
signoutRequestMessage.Parameters.Add("wtrealm", wtrealm);
FederatedAuthentication.SessionAuthenticationModule.SignOut();
var signoutUrl = signoutRequestMessage.WriteQueryString();
Run Code Online (Sandbox Code Playgroud)
结果,我得到了我应该重定向的注销URL,它将处理令牌并将我发送回去.URL如下所示:
https://myacsnamespace.accesscontrol.windows.net/v2/wsfederation?wa=wsignout1.0&wreply=http%3a%2f%2flocalhost%3a61192%2f&wtrealm=http%3a%2f%2flocalhost%3a61192%2f
Run Code Online (Sandbox Code Playgroud)
因此,它可以像Google,Yahoo和Microsoft帐户一样正常运行.当我退出并尝试访问受保护区域时,我会获得一个身份提供商列表,即使我选择了相同的提供商,我也必须再次登录.
但是,当我使用ADFS提供程序时,它的工作原理如下:
我点击退出并进入可用提供商的页面
我再次选择ADFS提供程序
我用旧的AD凭据到达保护区
如果我将ADFS作为唯一的提供者,则跳过上面的步骤2,并且我一直在不加入登录而无法更改用户.
当我看到会发生什么时,ACS不会处置它从ADFS获得的安全令牌,并重新使用它.
您是否有任何关于如何强制ACS处理此令牌的线索?
提前致谢!
此案例与Wiktor Zychla的问题非常相似,请参阅如何在与ADFS 2.0联合时正确设置超时
我们正在经历相同的行为,ADFS愉快地将用户重定向回Sharepoint站点并重新创建FedAuth cookie,即使ADFS应提示凭证 - 我们希望用户在一段时间的空闲时间后重新进行身份验证.基本上看起来会话总是滑动.
我们已禁用持久性cookie,因此在会话结束时通过关闭浏览器来删除FedAuth cookie,因此在关闭所有浏览器窗口并启动新会话后,用户必须重新进行身份验证,这样才有效.
据我所知,ADFS管理单元中的Web SSO生存期设置控制用户需要在AD FS上重新进行身份验证的时间(再次输入其凭据).Tokenlifetime和LogonTokenCacheExpirationWindow一起控制,当Sharepoint重定向到AD FS时,以便更新FedAuth cookie.
以下是来自http://msdn.microsoft.com/en-us/library/hh446526.aspx的引用:
要强制用户在重定向回ADFS时重新输入凭据,应将ADFS中的Web SSO生存期设置为小于或等于SAMLtokenlifetime减去LogonTokenCacheExpirationWindow的值.
所以,我们做了以下事情:
1.设置SAML令牌的生命周期
Add-PSSnapin Microsoft.ADFS.PowerShell
Set-AdfsRelyingPartyTrust –TargetName "[ourrelayingpartytrustreference]" –TokenLifeTime 7
Run Code Online (Sandbox Code Playgroud)
2.设置LogonTokenCacheExpirationWindow(并禁用持久性cookie)
Add-PSSnapin Microsoft.SharePoint.Powershell -EA 0
$sts = Get-SPSecurityTokenServiceConfig
$sts.UseSessionCookies = $true
$sts.LogonTokenCacheExpirationWindow = (New-Timespan -Minutes 1)
$sts.Update()
iisreset
Run Code Online (Sandbox Code Playgroud)
3.调整的Web SSO生存期:AD FS 2.0管理控制台管理单元中的5分钟(在Powershell中运行Get-ADFSProperties正确返回SsoLifetime:5)
因此预期的结果是:
当前的实际行为(步骤1-4类似):
(5.)AD FS不提示输入凭据,浏览器重定向到Sharepoint页面并重新创建FedAuth cookie.
所以 - 对我们来说,看起来AD FS会话永远不会过期,无论我们做什么.如果我们创建将LogonTokenCacheExpirationWindow值设置为高于SAMLtokenlifetime的错误配置(例如,LogonTokecacheExpirationWindow = 8和SAMLtokenlifetime = 7),我们将得到Sharepoint和AD FS之间循环的预期行为. …
authentication session-timeout sharepoint-2010 federation adfs2.0
我有一个部署到Azure的应用程序,它使用ADFS(Active Directory联合服务)进行身份验证.
当用户尝试导航到Azure上的应用程序时,它会将用户重定向到ADFS身份验证页面.用户输入凭据并单击"确定",ADFS会将用户重定向到我的应用的登录页面.
到目前为止,一切都很好.一旦用户点击着陆页,我就会在应用上收到通用服务器错误. 问题:我需要查看详细错误. 我尝试设置<customErrors="off" />
,重新打包我的应用程序并重新部署,但这不会给我详细的错误:
这是我尝试过的:我尝试在调试模式下打包我的应用程序(在发布模式不起作用后),我编辑了web.config(在解决方案的根目录,以及在Views文件夹中) ,只是为了涵盖所有基地).没有任何效果.
我究竟做错了什么?
这是设置身份验证的方法。-客户端浏览器将请求(下面的URL)发送到客户端的ADFS服务器,-客户端ADFS然后查看嵌套的中继状态,并将请求转发到我们的ADFS服务器。-我们的ADFS查看请求并将请求发送到我们的APP。
URL在这里。
https://clientadfs.clientdomain.com/adfs/ls/idpinitiatedsignon.aspx?RelayState=RPID%3Dhttps%3A%2F%2ouradfs.ourdomain.com%2Fadfs%2Fls%2F%26RelayState%3DRPID%3Dhttps%3A%2F%2ourapp.ourdomain.com%2Fvaruna%2Fconsole%2Fsso.aspx%3FsamISso%26lang%3Den_CA
Run Code Online (Sandbox Code Playgroud)
该请求将在ADFS服务器上生成一个没有错误的空白页。
我让提琴手跟踪了客户。客户端使用用户的电子邮件地址来标识用户。我可以在发送到客户端ADFS的SAML令牌中看到此电子邮件地址。此SAML令牌转到我们的ADFS服务器,我看到了从我们的ADFS服务器发出的SAML响应。但是,它没有用户电子邮件地址。我认为这就是问题所在。
在我们的ADFS服务器上,我拥有此客户的索赔(在Claims Provider Trust上)来处理用户ID(即他们的电子邮件):
声明规则名称:电子邮件传入的声明类型:名称ID传入名称ID格式:电子邮件传出名称ID格式:电子邮件传递所有声明值。
这是索赔规则语言中的索赔
c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", Properties["http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/format"] == "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"]
=> issue(Type = "Email", Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = c.Value, ValueType = c.ValueType);
Run Code Online (Sandbox Code Playgroud)
在客户端的ADFS配置上,这是他们的电子邮件/用户名配置:
IssuanceTransformRules : @RuleTemplate = "LdapClaims"
@RuleName = "Pass email"
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccou
ntname", Issuer == "AD AUTHORITY"]
=> issue(store = "Active Directory", types = ("http://schemas.xmlsoap.org/ws/20
05/05/identity/claims/nameidentifier"), query = ";mail;{0}", param = c.Value);
Run Code Online (Sandbox Code Playgroud)
我不知道我在做什么错。谁能发现我的问题?还是可以建议我应该去哪里看?
谢谢你的帮助!
您好我们希望将我们的Web应用程序与客户现有的ADFS提供程序服务集成.我们的应用程序将使用NodeJS和passport-saml连接到ADFS提供程序.
但是,根据我对生成依赖信任方XML的理解,我们需要Microsoft的向导adfssetup.exe,它只适用于Windows Server.
有没有办法在没有Windows机器的情况下创建此Trust并声明XML文档?
......显然有人可以自由式编码,但我真的不相信自己.
我一直在使用azure ACS来验证我的移动客户端与企业ADFS到我的asp.net服务器应用程序.我设法不仅让它在Web浏览器中运行良好,而且还运行在移动应用程序上(使用webview获取一个jwt令牌,然后将其发送到服务器进行验证并生成应用程序身份验证令牌).
但不幸的是,Azure ACS正在停产,因此我不得不寻找替代方案.
使用这篇文章我设法直接使用ADFS auth,没有任何外部服务,这对我来说是一个巨大的优势,因为一些客户可能在他们的内部网上有互联网限制.
当尝试为本机客户端(Windows WPF,Android和iOS)实现此问题时,问题就开始了,因为我无法找到针对这些情况的解决方案.
适用于Android和iOS的ADAL 似乎需要Windows Server 2012 R2.这种限制是一个很大的禁忌.
我找到了第三方auth提供商Auth0,但我真的想避免外部服务.
还有Azure B2C身份验证,但它有相同的外部服务问题.
有没有办法直接在ADFS上实现Azure ACS的功能?我需要的是一种直接从ADFS获取jwt令牌(甚至SAML2令牌)的方法.
adfs2.0 ×10
asp.net ×2
azure ×2
wif ×2
.net ×1
acs ×1
adfs ×1
android ×1
c# ×1
federation ×1
ios ×1
java ×1
jwt ×1
node.js ×1
passport.js ×1
sql ×1
sql-server ×1
wcf ×1
web-config ×1