- 記事一覧 >
- ブログ記事
AD FS構成からmod_auth_openidcによるOpenID Connect認証成功まで全手順
はじめに
Active Directory フェデレーション サービス(AD FS)、Apache、mod_auth_openidc、php を使って、SSO(シングルサインオン)の環境を作成しました。今回、その全手順を紹介していきます。
※AD インストール、ドメインコントローラーに昇格、AD FS インストールの部分は省略して、そこからスタートです。
他に分かりやすいサイトがありますので、OpenID Connect そのものの詳しい説明は有りません。
構成
構成は、以下です。
同じような構成の場合、さくっと作成できるはずというのが今回の趣旨になります。
ちょっとした違いで、どこかで引っかかるかもしれませんが、ご了承ください。
ユーザー
OS: Windows 10 PRO x64
IE
Chrome
Edge
Firefox
OpenID Provider
以下の呼び方の場合もあります。
OpenID プロバイダー
OP
Identity Provider
IdP
OS: Windows Server 2019 Datacenter Desktop
AD FS をインストールするサーバーです。
ルートドメイン名:ad.contoso.com
NetBIOS ドメイン名:AD
フェデレーション サービス名:fs.contoso.com
Relying Party
以下の呼び方の場合もあります。
RP
Service Provider
SP
Client
クライアント
OS: Raspberry Pi Desktop
Debian ベースの Linux です。
/etc/debian_version:10.7
Apache/2.4.38 (Debian)
mod_auth_openidc-2.3.10.2
PHP 7.3.31-1~deb10u1 (cli)
※php は、php である必要は無く、今回、認証が必要な Web アプリに見立てています。
FS 用 SSL 証明書作成
Windows Server 2019 での作業になります。
自己署名証明書を作成します。
セキュリティリスクはありますが、自己署名証明書でも問題無く機能します。
正式な証明書がある場合、この手順をスキップしてください。
PowerShell のコマンドレットで作成します。fs.contoso.com
は、任意で、後で設定する"フェデレーション サービス名"になります。
New-SelfSignedCertificate `
-Type SSLServerAuthentication `
-Subject "fs.contoso.com" `
-DnsName "fs.contoso.com" `
-KeyLength "4096" `
-KeyExportPolicy Exportable `
-NotAfter (Get-Date).AddYears(5)
個人 → 証明書 → 右クリック → すべてのタスク → エクスポート
をクリックします。
「はい、秘密キーをエクスポートします(Y)」を選択して、次へをクリックします。
「Personal Information Exchange - PKCS #12 (.PFX)(P)」を選択して、次へをクリックします。(チェックボックスは画像のままで。)
「グループまたはユーザー名 (推奨)(G)」にチェックを入れて、次へをクリックします。(AD\Administrator
は自動で入りました。)
FS 構成
Windows Server 2019 での作業になります。
サーバーマネージャーから「このサーバーにフェデレーション サービスを構成します。」をクリックします。
「フェデレーション サーバー ファームに最初のフェデレーション サーバーを作成します」にチェックで、次へをクリックします。
インポートボタンから先ほどのcert.pfx
を選択します。(正式証明書がある場合は、正式証明書を選択します。)
フェデレーション サービス名は、証明書の Subject で自動入力されます。
フェデレーション サービスの表示名を入力します。(何でも良いですが、ログイン画面に表示されます。)
次へをクリックします。
グループ管理サービスアカウントを選択し、アカウントパスワードを入力し、次へをクリックします。
グループ管理サービスアカウント(gMSA)とは、複数のサーバーで利用可能なサービスアカウントのことで、複数のサーバーで動かすサービスに共通のサービスアカウントを使いたいときに使用します。
「Windows Internal Database を使用してサーバーにデータベースを作成します。」にチェックで、次へをクリックします。
閉じるをクリックします。※!は、警告で、エラーでは無いため、問題ありません。
ファイアウォール有効化
Windows Server 2019 での作業になります。
FS 関係のファイアウォールを有効にします。
プログラム →Windows 管理ツール → セキュリティが強化された Windows Defender ファイアウォールを起動します。
AD FS ・・・の3つを有効にします。(選択して「規則の有効化」クリック)
Apache2 インストール
Linux での作業になります。
フェデレーション サービス名=fs.contoso.com
が名前解決できない場合、hosts に登録します。
このフェーズでは、一旦
https://IPアドレス/info.php
の動作が確認できるところまでで、必要最低限の事しかしません。
AD FS と通信できるか確認します。
以下のようにいろいろ返ってきたら、問題無いです。
# curl -k https://fs.contoso.com/adfs/fs/federationserverservice.asmx
<?xml version="1.0" encoding="utf-8"?><wsdl:definitions name="ADFS1TrustInformationService" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" xmlns:i0="http://schemas.microsoft.com/ActiveDirectory/FederationService/2005/07/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://tempuri.org/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"><wsp:Policy wsu:Id="BasicHttpBinding_ITrustInformationContract_policy"><wsp:ExactlyOne><wsp:All><sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"><wsp:Policy><sp:TransportToken><wsp:Policy><sp:HttpsToken RequireClientCertificate="false"/></wsp:Policy></sp:TransportToken><sp:AlgorithmSuite><wsp:Policy><sp:Basic256/></wsp:Policy></sp:AlgorithmSuite><sp:Layout><wsp:Policy><sp:Strict/></wsp:Policy></sp:Layout></wsp:Policy></sp:TransportBinding></wsp:All></wsp:ExactlyOne></wsp:Policy><wsdl:import namespace="http://schemas.microsoft.com/ActiveDirectory/FederationService/2005/07/" location="https://fs.contoso.com/adfs/fs/federationserverservice.asmx?wsdl=wsdl0"/><wsdl:types/><wsdl:binding name="BasicHttpBinding_ITrustInformationContract" type="i0:ITrustInformationContract"><wsp:PolicyReference URI="#BasicHttpBinding_ITrustInformationContract_policy"/><soap:binding transport="http://schemas.xmlsoap.org/soap/http"/></wsdl:binding><wsdl:service name="ADFS1TrustInformationService"><wsdl:port name="BasicHttpBinding_ITrustInformationContract" binding="tns:BasicHttpBinding_ITrustInformationContract"><soap:address location="https://fs.contoso.com/adfs/fs/federationserverservice.asmx"/></wsdl:port></wsdl:service></wsdl:definitions>
Apache2 をインストールして、mod_auth_openidc を組み込みます。
# apt -y update
# apt -y install apache2
# apt -y install libapache2-mod-auth-openidc
# a2enmod auth_openidc
# a2enmod ssl
# a2ensite default-ssl
Apache2 用自己署名証明書を作成します。
Country Name などの入力内容は適当で構いません。
キーが1024bitなどと短すぎると、以下のエラーになるかもしれません。今回2048bitで作成しています。
AH02562: Failed to configure certificate adfstest.itccorporation.jp:443:0 (with chain), check /etc/ssl/certs/server.crt
SSL Library Error: error:140AB18F:SSL routines:SSL_CTX_use_certificate:ee key too small
# openssl genrsa -aes128 2048 > server.key
Generating RSA private key, 2048 bit long modulus (2 primes)
............................................+++++
.....................................+++++
e is 65537 (0x010001)
Enter pass phrase:
Verifying - Enter pass phrase:
# openssl req -new -key server.key > server.csr
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Aichi
Locality Name (eg, city) []:Toyota
Organization Name (eg, company) [Internet Widgits Pty Ltd]:ITC
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:adfstest.itccorporation.jp
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
# openssl x509 -in server.csr -days 365 -req -signkey server.key > server.crt
Signature ok
subject=C = JP, ST = Aichi, L = Toyota, O = ITC, CN = adfstest.itccorporation.jp
Getting Private key
Enter pass phrase for server.key:
# openssl rsa -in server.key -out server.key
Enter pass phrase for server.key:
writing RSA key
# cp -p server.crt /etc/ssl/certs/server.crt
# cp -p server.key /etc/ssl/private/server.key
# chmod 400 /etc/ssl/private/server.key
# vi /etc/apache2/sites-available/default-ssl.conf
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
を以下に変更
↓
SSLCertificateFile /etc/ssl/certs/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
# apt -y install php-common libapache2-mod-php php-cli
# systemctl restart apache2
# vi /var/www/html/info.php
<?php
phpinfo();
https://192.168.11.9/info.php
へアクセスします。
phpinfo が表示されて、mod_auth_openidc が組み込まれていることを確認できたら、準備完了です。
現時点では、まだ mod_auth_openidc は使われていません。
AD FS の管理
Windows Server 2019 での作業になります。
サーバーマネージャーから
ツール →AD FS の管理
をクリックします。
アプリケーション グループを右クリックして、アプリケーショングループの追加をクリックします。
「サーバー アプリケーション」を選択して、名前、説明を適当に入力し、次へをクリックします。
リダイレクト URL を https://192.168.11.9/redirect_uri
とし、次へをクリックします。
クライアント識別子(クライアント ID)は、後で必要になるため、コピーしておきます。
リダイレクト URI は、Web アプリ側で意味のない(使わない)URI を適当に設定します。これも後で必要になります。
「共有シークレットを生成する」にチェックを入れて、次へをクリックします。
共有シークレットは、後で必要になるため、コピーしておきます。
mod_auth_openidc の設定
Linux での作業になります。
まず、AD FS の設定がうまくいっているか確認してみます。
# curl -k https://fs.contoso.com/adfs/.well-known/openid-configuration
{"issuer":"https:\/\/fs.contoso.com\/adfs","authorization_endpoint":"https:\/\/fs.contoso.com\/adfs\/oauth2\/authorize\/","token_endpoint":"https:\/\/fs.contoso.com\/adfs\/oauth2\/token\/","jwks_uri":"https:\/\/fs.contoso.com\/adfs\/discovery\/keys","token_endpoint_auth_methods_supported":["client_secret_post","client_secret_basic","private_key_jwt","windows_client_authentication"],"response_types_supported":["code","id_token","code id_token","id_token token","code token","code id_token token"],"response_modes_supported":["query","fragment","form_post"],"grant_types_supported":["authorization_code","refresh_token","client_credentials","urn:ietf:params:oauth:grant-type:jwt-bearer","implicit","password","srv_challenge","urn:ietf:params:oauth:grant-type:device_code","device_code"],"subject_types_supported":["pairwise"],"scopes_supported":["aza","openid","vpn_cert","winhello_cert","email","logon_cert","profile","allatclaims","user_impersonation"],"id_token_signing_alg_values_supported":["RS256"],"token_endpoint_auth_signing_alg_values_supported":["RS256"],"access_token_issuer":"http:\/\/fs.contoso.com\/adfs\/services\/trust","claims_supported":["aud","iss","iat","exp","auth_time","nonce","at_hash","c_hash","sub","upn","unique_name","pwd_url","pwd_exp","mfa_auth_time","sid","nbf"],"microsoft_multi_refresh_token":true,"userinfo_endpoint":"https:\/\/fs.contoso.com\/adfs\/userinfo","capabilities":[],"end_session_endpoint":"https:\/\/fs.contoso.com\/adfs\/oauth2\/logout","as_access_token_token_binding_supported":true,"as_refresh_token_token_binding_supported":true,"resource_access_token_token_binding_supported":true,"op_id_token_token_binding_supported":true,"rp_id_token_token_binding_supported":true,"frontchannel_logout_supported":true,"frontchannel_logout_session_supported":true,"device_authorization_endpoint":"https:\/\/fs.contoso.com\/adfs\/oauth2\/devicecode"}r
↑
このようにissuer
、authorization_endpoint
が載っている json が返ってきたら正常です。
応答内容は、必要なすべてのエンドポイントと公開鍵の場所情報を含む、OpenID プロバイダーの構成に関する一連のクレーム(claim)です。クレーム(claim)とは、OpenID プロバイダー(ここでは、AD FS)から得られる json の情報群、データの事です。
mod_auth_openidc の設定を追加します。
# vi /etc/apache2/mods-available/auth_openidc.conf
全部コメントアウトされていると思いますので、以下の設定を末尾等に設定します。
OIDCRedirectURI https://192.168.11.9/redirect_uri
OIDCCryptoPassphrase password
OIDCProviderMetadataURL https://fs.contoso.com/adfs/.well-known/openid-configuration
OIDCScope openid
OIDCSSLValidateServer Off
OIDCResponseType code
OIDCClientID c442e5d3-1e52-4365-9c8d-9488eed9da74
OIDCClientSecret esjIM3pAYmhrcwM7-cAo_Zp5MRHej5h2NainQ2XV
OIDCPKCEMethod S256
OIDCOAuthSSLValidateServer Off
OIDCSessionInactivityTimeout 300
OIDCHTMLErrorTemplate /etc/apache2/auth_openidc_error.html
OIDCDefaultLoggedOutURL https://192.168.11.9/loggedout.html
OIDCClaimPrefix OIDC_CLAIM_
OIDCRemoteUserClaim sub
OIDCPassClaimsAs both
OIDCAuthNHeader X-Remote-User
フェデレーション サービス名:
fs.contoso.com
クライアント識別子:
c442e5d3-1e52-4365-9c8d-9488eed9da74
リダイレクトURI:
https://192.168.11.9/redirect_uri
シークレット:
esjIM3pAYmhrcwM7-cAo_Zp5MRHej5h2NainQ2XV
で設定しています。適宜読み替えが必要です。
以下、設定の意味です。
OIDCRedirectURI https://192.168.11.9/redirect_uri
mod_auth_openidc で保護されているサーバー上のパスのみを指している必要があります。
ただし、提供する必要のある実際のコンテンツを指してはいけません。
ログイン成功後最初にリダイレクトされる URI です。この URI にリダイレクトされた後、元々アクセスしようとしていた URI にリダイレクトされます。
例:
https://192.168.11.9/info.php
へアクセス
↓
ログイン画面 でログイン(ログイン成功)
↓https://192.168.11.9/redirect_uri
へリダイレクト
↓https://192.168.11.9/info.php
へリダイレクト
必要に応じて、/protected
、/redirect_uri
などの相対 URL を使用できます。
OIDCCryptoPassphrase password
任意の値を設定します。
暗号化の目的でパスワードを設定します。これは次の目的で使用されます。
・(一時的な)状態 Cookie の暗号化
・セッション Cookie を含む可能性のあるキャッシュエントリの暗号化。
サーバーが同じ OIDCCryptoPassphrase を使用している場合、暗号化されたキャッシュをサーバー間で共有できます。
値が exec で始まる場合:結果のコマンドが実行され、
プログラムによって標準出力に戻された最初の行がパスワードとして使用されます。
コマンドは、絶対コマンドでも、Web サーバールートからの相対コマンドでもかまいません。
ロードバランサーで振り分けられているような場合、お互いに Cookie を読み取れるように、すべて同じ値である必要があります。
OIDCProviderMetadataURL https://fs.contoso.com/adfs/.well-known/openid-configuration
OpenID Connect Provider メタデータの URI を指定します。
この URI からエンドポイント、サポートしているタイプやアルゴリズムなどを取得します。
OIDCScope openid
アプリケーションがどこまでの情報(アクセストークン)を要求するかの設定です。
スコープとclaimの例:
openid
: sub, iss, aud, exp, iat, and at_hashprofile
: name, family_name, given_name, middle_name, nickname, picture, and updated_atemail
: email, email_verified
IDトークンサンプル:
{
"iss": "http://my-domain.auth0.com",
"sub": "auth0|123456",
"aud": "my_client_id",
"exp": 1311281970,
"iat": 1311280970,
"name": "Jane Doe",
"given_name": "Jane",
"family_name": "Doe",
"gender": "female",
"birthdate": "0000-10-31",
"email": "janedoe@example.com",
"picture": "http://example.com/janedoe/me.jpg"
}
複数指定の場合、ダブルクォートでくくって、スペース区切りで設定します。
例:"openid profile email"
この設定が無い場合のデフォルトは、openid
です。
AD FSの場合、profile emailを追加しても何も変わらないようです。(AD FS設定で変わるかどうかは未検証です。)
OIDCSSLValidateServer Off
OP(OpenID Provider)の証明書を検証するかどうかの設定です。
OP(OpenID Provider)つまり、今回の場合、AD FS に自己署名証明書を設定したため、Off
にして証明書の検証を行いません。
デフォルトは、On
です。
OIDCResponseType code
レスポンスタイプ(response_type)を指定します。
フローは以下の種類があります。(詳しいことは省略します。)
code : Authorization Code Flow
id_token : Implicit Flow
id_token token : Implicit Flow
code id_token : Hybrid Flow
code token : Hybrid Flow
code id_token token : Hybrid Flow
デフォルトは、code
です。
OIDCClientID c442e5d3-1e52-4365-9c8d-9488eed9da74
クライアント ID(client-id)を指定します。
(AD FS の画面に表示されていたクライアント識別子です。)
OIDCClientSecret esjIM3pAYmhrcwM7-cAo_Zp5MRHej5h2NainQ2XV
secret を指定します。
(AD FS の画面に表示されていたシークレットです。)
OIDCPKCEMethod S256
PKCE メソッドを設定します。S256
の場合は、SHA-256 です。
PKCE は、Proof Key for Code Exchange の略で、呼び方はピクシーと呼びます。RFC 7636 として公開されています。
PKCE は認可コードの横取り攻撃の対策として定義されています。
PKCEについて詳しい説明は省略しますが、ここのサイトが分かりやすかったです。
↓
Auth0を利用してOAuth 2.0のPKCEを理解する
https://dev.classmethod.jp/articles/oauth-2-0-pkce-by-auth0/
設定されていない場合、PKCE は使用されません。(認可コードの横取り攻撃の対策無しになります。)
OIDCOAuthSSLValidateServer Off
RP(Relying Party)の証明書を検証するかどうかの設定です。RP(Relying Party)つまり、今回の場合、https://192.168.11.9/
に自己署名証明書を設定したため、Off
にして証明書の検証を行いません。
・・・と思いましたが、OIDCOAuth*の設定、つまり、OAuth2.0の設定があるときに関係するようです。今回必要の無い設定です。
デフォルトは、On
です。
OIDCSessionInactivityTimeout 300
無操作の時にセッションが無効になるまでの秒を設定します。
デフォルトは 300 秒です。
OIDCHTMLErrorTemplate /etc/apache2/auth_openidc_error.html
エラー発生時に表示される HTML のパスを指定します。
以下が HTML の例ですが、1 つ目の%s にはエラーメッセージが、2 つ目の%s にはエラーの説明が埋め込まれます。
<html>
<head>
<meta charset="utf-8"/>
<title>OIDCHTMLErrorTemplate</title>
</head>
<h1>OpenID connect Error</h1>
<p>Error: %s</p>
<p>Description: %s</p>
<p><a href="/">Home</a></p>
</body>
</html>
設定されていない場合、内部テンプレートが使用されます。
OIDCDefaultLoggedOutURL https://192.168.11.9/loggedout.html
ログアウト後に遷移する URI を指定します。
以下が HTML の例です。
<html>
<head>
<meta charset="utf-8" />
<title>Logged Out</title>
</head>
<body>
<h1>You have been logged out.</h1>
<p><a href="/">Return to login</a></p>
</body>
</html>
設定されていない場合、内部ページが表示されます。
OIDCClaimPrefix OIDC_CLAIM_
claim を環境変数や HTTP ヘッダーフィールドにする際に付与するプレフィックスを指定します。OIDC_CLAIM_
を設定し、phpinfo で見た例です。(Apache Environment)
↓
デフォルトは、OIDC_CLAIM_
です。
OIDCRemoteUserClaim sub
apache の認証されたユーザー ID を示す変数 REMOTE_USER として設定する claim の名前を指定します。
デフォルトは、sub
です。
sub
を設定し、phpinfo で見た例です。(Apache Environment)
↓
正規表現で切り出すこともできます。
この例では、email から@の左側の文字列を取り出してユーザー ID とします。OIDCRemoteUserClaim email ^(.*)@
この例では、email から DOMAIN\userid としています。OIDCRemoteUserClaim email ^(.*)@([^.]+)\..+$ $2\\$1
(2021年11月25日時点情報)mod_auth_openidc公式の説明文に書いてある例ですが、よく見ると正規表現が間違っていて、以下のエラーになりました。
oidc_util_json_string_print: oidc_util_check_json_error: response contained an "error" entry with value: ""invalid_grant""
oidc_util_json_string_print: oidc_util_check_json_error: response contained an "error_description" entry with value: ""MSIS9612: The authorization code received in 'code' parameter is invalid. ""
oidc_proto_resolve_code_and_validate_response: failed to resolve the code
正:
OIDCRemoteUserClaim email ^(.*)@([^\.]+)\..+$ $2\\$1
OIDCPassClaimsAs both
アクセストークンの claim をアプリケーションにどのような形で渡すかを指定します。none
:渡さない。environment
:環境変数headers
:HTTP ヘッダboth
:環境変数&HTTP ヘッダ
both
を設定し、phpinfo で見た例です。(Apache Environment と HTTP Headers Information)
↓
バージョン 2.4.6 からbase64url
も使えるようです。
デフォルトは、both
です。
リフレッシュトークンが有効な場合、OIDC_refresh_token で渡されます。
リフレッシュトークンは、アクセストークンが無効または期限切れになったときに再認証無しで新規アクセストークンを取得するため、発行されるトークンです。
OIDCAuthNHeader X-Remote-User
認証されたユーザーの名前で設定する HTTP ヘッダー変数名を指定します。つまり、REMOTE_USER で設定され、OIDCRemoteUserClaim または OIDCOAuthRemoteUserClaim で構成されたものをコピーします。
設定されていない場合、ヘッダーは追加されません。
X-Remote-User
を設定し、phpinfo で見た例です。(HTTP Headers Information)
↓
mod_auth_openidc 設定に対応する HTML を配置します。
# vi /var/www/html/loggedout.html
<html>
<head>
<meta charset="utf-8" />
<title>OIDCDefaultLoggedOutURL</title>
</head>
<body>
<h1>You have been logged out.</h1>
<p><a href="/">Return to login</a></p>
</body>
</html>
# vi /etc/apache2/auth_openidc_error.html
<html>
<head>
<meta charset="utf-8"/>
<title>OIDCHTMLErrorTemplate</title>
</head>
<h1>OpenID connect Error</h1>
<p>Error: %s</p>
<p>Description: %s</p>
<p><a href="/">Home</a></p>
</body>
</html>
ドキュメントルート(/var/www/html
)全体に対して、認証を有効にし、/var/www/html/loggedout.html
だけ認証不要にします。
# vi /etc/apache2/apache2.conf
#<Directory /var/www/>
# Options Indexes FollowSymLinks
# AllowOverride None
# Require all granted
#</Directory>
<Location />
AuthType openid-connect
Require valid-user
</Location>
<Location /loggedout.html>
Require all granted
</Location>
# systemctl restart apache2
この時点で、https://192.168.11.9/info.php
にアクセスして、
以下のように認証画面が表示されて、AD(Active Directory)のユーザーでログイン出来たら成功です。
※fs.contoso.com のログイン画面へリダイレクトされます。fs.contoso.com の名前解決ができない場合、hosts 登録が必要です。
Windows 統合認証(IWA/WIA)
AD FS で Windows 統合認証 (IWA/WIA) を使用するようにブラウザーを構成します。
どういうことかと言うと、以下の流れになるということです。
Windows に ad\administrator でログイン
↓
ブラウザを開いて、https://192.168.11.9/info.php
へアクセス
↓
認証画面が表示されず、https://192.168.11.9/info.php
へ ad\administrator でログイン完了
PC端末での作業になります。
●IE の場合
インターネットオプション →「統合 Windows 認証を使用する」にチェックします。
ローカル イントラネットにhttps://192.168.11.9
https://fs.contoso.com
を登録します。
「イントラネットのネットワークを自動的に検出する」のチェック無しで「詳細設定」とします。
セキュリティ設定の「イントラネット ゾーンでのみ自動的にログオンする」にチェックを入れ OK ボタンをクリックします。
一旦、IE を閉じて、https://192.168.11.9/info.php
へアクセスして、ユーザー名、パスワード入力無しでアクセス出来たら成功です。
信頼済みサイトに登録する以下の方法でもできます。
信頼済みサイトにhttps://192.168.11.9
https://fs.contoso.com
を登録します。
セキュリティ設定の「現在のユーザー名とパスワードで自動ログオンする」にチェックを入れ OK ボタンをクリックします。
●Chrome、Chromium 版 Edge の場合 IE の対応に加えて、AD FS の方の対応が必要になります。
Windows Server 2019 での作業になります。
この作業が必要な理由ですが、Chrome、Chromium 版 Edge が AD FS に Windows 統合認証(IWA/WIA)対象ブラウザとして、登録されていないからです。
PowerShell で以下のように確認できます。
> Get-AdfsProperties | select -ExpandProperty WiaSupportedUserAgents
MSAuthHost/1.0/In-Domain
MSIE 6.0
MSIE 7.0
MSIE 8.0
MSIE 9.0
MSIE 10.0
Trident/7.0
MSIPC
Windows Rights Management Client
MS_WorkFoldersClient
=~Windows\s*NT.*Edge
Chrome、Chromium 版 Edge、加えて Firefox の User-Agent 文字列には、Mozilla/5.0
が含まれているため、PowerShell で以下のように、Set-AdfsProperties
コマンドレットで登録します。
> Set-AdfsProperties -WIASupportedUserAgents ((Get-ADFSProperties | Select -ExpandProperty WIASupportedUserAgents) + "Mozilla/5.0")
AD FS の再起動は必要ありません。ブラウザを閉じてアクセスすると、以下のように認証画面が出ずにアクセスできるはずです。
●Firefox の場合
PC端末での作業になります。
IE、Chrome の対応に加えて、about:config
の設定が必要になります。
URL 欄にabout:config
を入力して、「危険性を承知の上で使用する」をクリックします。
検索欄にnetwork*auth.trust
を入力し、表示されたnetwork.automatic-ntlm-auth.trusted-uris
network.negotiate-auth.trusted-uris
設定両方に、fs.contoso.com
を設定します。
ヨシ!
その他、宣伝、誹謗中傷等、当方が不適切と判断した書き込みは、理由の如何を問わず、投稿者に断りなく削除します。
書き込み内容について、一切の責任を負いません。
このコメント機能は、予告無く廃止する可能性があります。ご了承ください。
コメントの削除をご依頼の場合はTwitterのDM等でご連絡ください。