Emitir múltiplas reivindicações em uma única regra

4

Existe uma maneira simples de emitir várias declarações em uma única regra de declaração do ADFS? O único exemplo que posso ver são aqueles que consultam um repositório de atributos e cada coluna recuperada é mapeada para um tipo de declaração diferente.

Eu tentei uma abordagem "óbvia" de usar Types em vez de Type , colocando os dois tipos entre colchetes (de acordo com o exemplo SQL), mas preciso fornecer vários valores - então pensei em usar Values em vez de Value . Mas ele engasga com a parte Types de qualquer maneira.

Isso não funciona:

c:[Type == incomingClaim, Value =~ incomingMatch]
 => issue(Types = (type1,type2), Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer,
      Values = (value1,value2), ValueType = c.ValueType);

Em que incomingClaim , type1 , type2 , value1 e value2 são literais de cadeia simples e incomingMatch é uma regex.

É claro que eu poderia fazer isso como várias regras de reivindicação, mas esperava manter as coisas simples por enquanto. - Haverá ~ 5 declarações de saída, por enquanto, mas eu quero configurar alguns usuários para obter todas as reivindicações sem ter que configurar 5 regras. O número de reivindicações aumentará com o passar do tempo.

(Eu só marquei como ADFS - não consigo ver outras tags óbvias para incluir)

    
por Damien_The_Unbeliever 12.11.2012 / 14:52

2 respostas

4

Uma regra do ADFS é composta de uma condição, o token => , um comando ( issue ou add ) e terminou com um ponto-e-vírgula. Você não pode emitir vários literais por regra, mas pode usar o powershell para facilitar o trabalho.

Em vez de entrar na interface do usuário e passar por esse assistente 5 vezes, você pode usar Set-AdfsRelyingPartyTrust para definir todas as regras de uma só vez.

Set-RelyingPartyTrust -TargetName SharePoint_Prod -IssuanceTransformRulesFile c:\drop\rules.txt

onde o rules.txt se parece com

c:[Type == incomingClaim, Value =~ incomingMatch] => issue(Type = type1, Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = value1, ValueType = c.ValueType);
c:[Type == incomingClaim, Value =~ incomingMatch] => issue(Type = type2, Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = value2, ValueType = c.ValueType);
c:[Type == incomingClaim, Value =~ incomingMatch] => issue(Type = type3, Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = value3, ValueType = c.ValueType);
c:[Type == incomingClaim, Value =~ incomingMatch] => issue(Type = type4, Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = value4, ValueType = c.ValueType);
c:[Type == incomingClaim, Value =~ incomingMatch] => issue(Type = type5, Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = value5, ValueType = c.ValueType);

A diferença em relação à interface do usuário? Eu usei copiar e colar.

    
por 16.01.2014 / 06:03
2

Embora a abordagem de Mitch esteja correta, há uma questão fundamental aqui. Usando o cmdlet mencionado acima:

Set-RelyingPartyTrust -TargetName SharePoint_Prod -IssuanceTransformRulesFile c:\drop\rules.txt

substituirá todas as regras de transformação de emissão pelo conteúdo do arquivo de texto. Corrija-me se estiver errado, mas não há opção 'Anexar' nessa abordagem. Além disso, não tenho certeza se foi realmente tentado, mas isso resultará em um erro. PS espera que todas as regras comecem com:

@RuleName = "$Rulename"

E se houver apenas 1 nome de regra para várias regras, o ADFS solicitará um erro (na verdade, não tentei). A melhor opção de trabalho se você quiser usar o cmdlet é ter o arquivo de texto como algo assim:

@RuleName = "RuleName1"
c:[Type == incomingClaim, Value =~ incomingMatch] => issue(Type = type1, Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = value1, ValueType = c.ValueType);

@RuleName = "RuleName2"
c:[Type == incomingClaim, Value =~ incomingMatch] => issue(Type = type2, Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = value2, ValueType = c.ValueType);

@RuleName = "RuleName3"
c:[Type == incomingClaim, Value =~ incomingMatch] => issue(Type = type3, Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = value3, ValueType = c.ValueType);

@RuleName = "RuleName4"
c:[Type == incomingClaim, Value =~ incomingMatch] => issue(Type = type4, Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = value4, ValueType = c.ValueType);

@RuleName = "RuleName5"
c:[Type == incomingClaim, Value =~ incomingMatch] => issue(Type = type5, Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = value5, ValueType = c.ValueType);

Isso ainda é relativamente mais fácil de codificar no PowerShell, mas ter vários nomes de regras para regras de declaração essencialmente muito semelhantes é um incômodo. Ainda seria melhor se você pudesse emitir várias afirmações em apenas uma regra. Espero que esse recurso possa ser adicionado no futuro.

    
por 17.02.2016 / 17:45

Tags