異なるActive Directory間の複数ADFS間連携（multiple AD FS federation）[2/3]


###4.5. YELLOW上のBLUE要求プロバイダー信頼の要求規則(受け付け変換規則)を作成する
上記4.2.のYELLOW上のBLUE要求プロバイダー信頼のの要求規則(受け付け変換規則Acceptance Transform Rules)を作成します。
BULE側ADFSから受け取ったNameIDタグをそのままYELOOW側ADFSへ渡すため”入力方向の要求をパススルーまたはフィルター処理”にて追加します。これは必須の設定です(下図)。
![4.5_002mini.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317326/71ee383a-65d4-94f0-e289-38c7f76e4c56.png)

また、今回は、BLUE側から受け取った属性もApp側に渡したいので ↑ に加えて、その他属性を追加する要求記述も追加します。これは必須ではありません。
一個一個属性を記載するのは面倒なので、全属性を渡す処理を”カスタム規則を使用して要求を送信”で記載します(下図)。
![4.5_003mini.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317326/946afe80-82ac-8ac6-4780-c354a690f0f5.png)
この ↑　の図中のカスタム規則は手動で以下を入力します。

```
x:[]
 => issue(claim = x);
```
　
これは渡された全属性をそのまま横へ流すという記載です（テストのときとか超便利）。
ここの要求記述の文法は以下が詳しいです。

- [slide share /MS 安納さんの記事 AD FS deep dive - claim rule set](https://www.slideshare.net/junichia/ad-fs-deep-dive-claim-rule-set)
- [technet記事 /Understanding Claim Rule Language in AD FS 2.0 & Higher](https://social.technet.microsoft.com/wiki/contents/articles/4792.understanding-claim-rule-language-in-ad-fs-2-0-higher.aspx)

###4.6. YELLOW上のApp利用者信頼の要求規則を作成する
上記4.3.のYELLOW上のApp利用者信頼の要求規則(発行変換規則 Issuance Transform Rules)を作成します。
ここが今回の投稿の肝です。BLUEから渡された属性（BLUE側ADではwwwhomepage属性）をキー値(YELLOW側ADのUserPrincipalName属性)としてYELLOW側ADの各種属性値を取得し、Appへセキュリティトークンとして送出します。
要求規則は手動でしかできないため手動（”カスタム規則を使用して要求を送信”）で記載します。ここではupnとgivennameをYELLOW側ADから拾ってみます。

```
c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"]
 => issue(store = "Active Directory", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn", 
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname"), query = "userPrincipalName={0};userPrincipalName,givenName;YELLOW\adfs-svc", param = c.Value);
```
ADFS上でこんな風に見えます。
![4.6_001mini.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317326/3f8431e1-0e35-956f-1155-8dd04214cbdb.png)

次に、BLUE側から送り込まれているトークンをそのまま、横流しします。すべての属性を”入力方向の要求をパススルーまたはフィルター処理”で拾ってもいいのですが、今回は渡された全属性をそのまま横へ流すという記載（超便利）をまた利用します。
具体的な”カスタム規則を使用して要求を送信”は(下図)。
![4.6_002mini.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317326/8a46d820-26da-e087-0a49-6bafaf9db2b4.png)

これでおわりです！お疲れさまでした！


####4.7. トークン内容をC#コンソールツール書いて確認する
トークンがでているかC#アプリをWIF4.5とWCFを書いて出力した結果は以下となります。
全項目横流ししたせいで、x-ms-client-ipとかもおまけで出力されていますね。

```
<Attribute Name="meowmeow" a:OriginalIssuer="http://adfs.blue.com/adfs/services/trust" xmlns:a="http://schemas.xmlsoap.org/ws/2009/09/identity/claims">
<AttributeValue>magpie.robin@yellow.net</AttributeValue></Attribute>

<Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn" a:OriginalIssuer="http://adfs.blue.com/adfs/services/trust" xmlns:a="http://schemas.xmlsoap.org/ws/2009/09/identity/claims">
<AttributeValue>magpie@blue.com</AttributeValue></Attribute>

<Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress" a:OriginalIssuer="http://adfs.blue.com/adfs/services/trust" xmlns:a="http://schemas.xmlsoap.org/ws/2009/09/identity/claims">
<AttributeValue>magpie@mail.blue.com</AttributeValue></Attribute>

#中略
<Attribute Name="http://schemas.microsoft.com/2012/01/requestcontext/claims/x-ms-client-ip" a:OriginalIssuer="CLIENT CONTEXT" xmlns:a="http://schemas.xmlsoap.org/ws/2009/09/identity/claims">
<AttributeValue>172.30.100.61</AttributeValue></Attribute>



<Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn">
<AttributeValue>magpie.robin@yellow.net</AttributeValue></Attribute>

<Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname">
<AttributeValue>magpie.yellow</AttributeValue>

```


- [msdn記事 /YELLOW側ADから属性を取りだす要求記述についてQuerying attributes from Active Directory using ADFS with a 3rd party Identity Provider](https://blogs.msdn.microsoft.com/pinch-perfect/2015/09/14/querying-attributes-from-active-directory-using-adfs-with-a-3rd-party-identity-provider/)
- [msdn記事 /複数ADFSの場合のWIFプログラミングの記事WIF: Fetch SAML tokens from IssuedToken* endpoint for backend service call](https://blogs.msdn.microsoft.com/dsnotes/2018/03/15/wif-fetch-saml-tokens-from-issuedtoken-endpoint-for-backend-service-call/)

ADFSの構成は異常ですが、次回[3]ではWIF4.5コードとその他要求記述などについて記載します！