In the following blog posts I explained for which user accounts an ADFS STS was able to issue security tokens: (2013-09-24) AD User Accounts For Which The ADFS STS Can Generate Security Tokens.
–
Unless your AD forests have a forest-wide two-way trust with the AD forest hosting ADFS, you would need to deploy an additional ADFS instance for every other AD forest and setup federation. In this post let’s have a look at some subtle differences in setup, and also something new that recently became possible.
–
[Scenario 1]
- DMZ forest fully trusts the internal forest (forest wide authentication is enabled)
- Internal forest DOES NOT trust the DMZ forest
- ADFS server is member of the DMZ forest
- ADFS service account is part of the internal forest
–
With this setup it is possible for:
- Internal users to authenticate against the ADFS STS server
- DMZ users to authenticate against the ADFS STS server
- The ADFS service account to retrieve attribute info for users part of the internal forest
- The ADFS service account to retrieve attribute info for users part of the DMZ forest
–
The biggest downside here is that in this scenario you have a very powerful system, the ADFS STS server, in the DMZ that is allowed to issue security tokens for connected applications on the internal forest or in the cloud. If that ADFS STS server is compromised, everything connected to ADFS (e.g. applications, other federation systems) goes down the drain. In addition, if the service account from the internal forest, which is used on the ADFS STS server in the DMZ forest, is compromised, it can be used to access anything on the internal forest where it has explicit permissions, or through authenticated users. Rule of thumb: NEVER place an ADFS STS in a DMZ forest!
This scenario would also not work when you have multiple forests compared to the DMZ forest. You would still need to implement an ADFS instance in the forests similar to the DMZ forest.
REMARK: I would never suggest this setup as its security is really bad.
–
[Scenario 2]
- DMZ forest fully trusts the internal forest (forest wide authentication is enabled)
- Internal forest selectively trusts the DMZ forest (selective authentication is enabled)
- ADFS server is member of the internal forest
- ADFS service account is part of the DMZ forest
–
With this setup it is possible for:
- Internal users to authenticate against the ADFS STS server
- DMZ users to authenticate against the ADFS STS server
- The ADFS service account to retrieve attribute info for users part of the internal forest, but only AFTER it has been given the explicit permission "Allowed To Authenticate" on every DC computer account to be able to perform LDAP queries
- The ADFS service account to retrieve attribute info for users part of the DMZ forest
–
The biggest downside here is that in this scenario the ADFS service is able to perform any LDAP query for anything it likes. Besides that you have to configure it in such a way that it does not become a management nightmare when you add new DCs and/or remove existing DCs. The only way to achieve that easily would be to configure the permissions on the "Domain Controllers" OU in every AD domain in the internal forest. This scenario would also not work when you have multiple forests compared to the DMZ forest. You would still need to implement multiple AD service accounts which ADFS does not support.
REMARK: I would never suggest this setup as its security is really bad and I do not like the setup either.
–
[Scenario 3]
- DMZ forest fully trusts the internal forest (forest wide authentication is enabled)
- Internal forest selectively trusts the DMZ forest (selective authentication is enabled)
- ADFS server is member of the internal forest
- ADFS service account is part of the internal forest
–
With this setup it is possible for:
- Internal users to authenticate against the ADFS STS server
- DMZ users to authenticate against the ADFS STS server, but only AFTER those users have been given the explicit permission "Allowed To Authenticate" on the ADFS service account. This can be done through a custom security group, which needs to be managed, or by just using the "Authenticated Users" well-known security principal.
- The ADFS service account to retrieve attribute info for users part of the internal forest
- The ADFS service account to retrieve attribute info for users part of the DMZ forest
–
This way all important and secure resources are in the internal forest, and DMZ users can only authenticate against the ADFS STS server and nothing else.
REMARK: I would suggest this setup as its security and setup is better than the previous 2 scenarios.
–
[Scenario 4]
- DMZ forest DOES NOT trust the internal forest
- Internal forest DOES NOT trust the DMZ forest
- ADFS server is member of the internal forest
- ADFS service account is part of the internal forest
–
With this setup it is possible for:
- Internal users to authenticate against the ADFS STS server
- DMZ users to authenticate against the ADFS STS server, but only AFTER a so called local claims provider has been configured for every untrusted forest as explained in the following blog post: (2014-10-20) Configuring A New Identity Store As A Claims Provider In ADFS
- The ADFS service account to retrieve attribute info for users part of the internal forest
- The ADFS service account to retrieve attribute info for users part of the DMZ forest, through the credentials configured for the local claims provider.
–
The biggest downside here is that this scenario is only possible with ADFS v4.0! For more information see: (2014-10-20) Configuring A New Identity Store As A Claims Provider In ADFS. This scenario would also work when you have multiple forests compared to the DMZ forest. You would to configure a local claims provider for every untrusted AD forest.
REMARK: I would suggest this setup as its security and setup is better than the previous scenarios as it does not require Windows trusts at all!
–
Cheers,
Jorge
———————————————————————————————
* This posting is provided "AS IS" with no warranties and confers no rights!
* Always evaluate/test yourself before using/implementing this!
* DISCLAIMER: https://jorgequestforknowledge.wordpress.com/disclaimer/
———————————————————————————————
############### Jorge’s Quest For Knowledge #############
######### http://JorgeQuestForKnowledge.wordpress.com/ ########
———————————————————————————————