カテゴリー別アーカイブ: Azure

Azure Web Site で CakePHPを使用していてBasic認証をかける方法

目的:開発時に全ページに認証をかけたい

CakePHPはコンポーネントやAction単位に認証を付けられる機能があります。

しかし、この機能は特定の管理ページだけに認証を付ける場合には便利ですが、

今回は全ページに認証を付けたかったので、少し目的が違います。

Azure Web SiteはApacheでないので、htaccessとか使えない

全ページに認証をつけるのだから、何も考えずにhtaccessで行うと思っていました。

ぐぐって調べてもCakePHPでもトップディレクトリのhttaccessをごにょごにょ書き換えれば良さそうでした。

しかし、うまくいかない。

….

すこしはまりましたが、原因はAzureはApacheではないのでhtaccess使えないってことでした。

まあ、確かにそうですね。気づかなかったのがお恥ずかしいです。

手順:HttpAuthModuleを使う

下記ページを参考にしました。

  • http://azure-recipe.kc-cloud.jp/2015/01/website-basic-auth/

手順は次のようになります

HttpAuthModuleを下記からダウンロードします。

  • https://github.com/nabehiro/HttpAuthModule

今回は全ページに認証を付けたいので、トップディレクトリに「bin」ディレクトリを作成し、

その中に「HttpAuthModules.dll」を配置します。

次に、「Web.config」の修正です。

AzureでのCakePHPのトップディレクリにはすでにWeb.configが存在するはずです。

修正前は次のような形だと思います。

<?xml version=”1.0″ encoding=”UTF-8″?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name=”Redirect static resources” stopProcessing=”true”>
<match url=”^(ico|img|css|files|js)(.*)$” />
<action type=”Rewrite” url=”app/webroot/{R:1}{R:2}” appendQueryString=”false” />
</rule>
<rule name=”Imported Rule 1″ stopProcessing=”true”>
<match url=”^(.*)$” ignoreCase=”false” />
<conditions logicalGrouping=”MatchAll”>
<add input=”{REQUEST_FILENAME}” matchType=”IsFile” negate=”true” />
</conditions>
<action type=”Rewrite” url=”index.php?url={R:1}” appendQueryString=”true” />
</rule>
<rule name=”Imported Rule 2″ stopProcessing=”true”>
<match url=”^$” ignoreCase=”false” />
<action type=”Rewrite” url=”/” />
</rule>
<rule name=”Imported Rule 3″ stopProcessing=”true”>
<match url=”(.*)” ignoreCase=”false” />
<action type=”Rewrite” url=”/{R:1}” />
</rule>
<rule name=”Imported Rule 4″ stopProcessing=”true”>
<match url=”^(.*)$” ignoreCase=”false” />
<conditions logicalGrouping=”MatchAll”>
<add input=”{REQUEST_FILENAME}” matchType=”IsFile” negate=”true” />
</conditions>
<action type=”Rewrite” url=”index.php?url={R:1}” appendQueryString=”true” />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>

これを次のように修正します。下記例ではユーザ名「user」パスワード「passwd」を設定した例です。

<?xml version=”1.0″ encoding=”UTF-8″?>
<configuration>
<!– Modification START –>
<configSections>
<section name=”httpAuthModule” type=”System.Configuration.NameValueFileSectionHandler” />
</configSections>
<httpAuthModule>
<add key=”AuthMode” value=”Digest”/>
<add key=”Realm” value=”SecureZone”/>
<add key=”Credentials” value=”user:passwd;”/>
<add key=”DigestNonceValidDuration” value=”120″/>
<add key=”DigestNonceSalt” value=”uht9adfafewbSAX” />
</httpAuthModule>
<!– Modification END–>
<system.webServer>
<!– Modification START –>
<modules>
<add type=”HttpAuthModule.HttpAuthModule” name=”HttpAuthModule” />
</modules>
<!– Modification END–>
<rewrite>
<rules>
<rule name=”Redirect static resources” stopProcessing=”true”>
<match url=”^(ico|img|css|files|js)(.*)$” />
<action type=”Rewrite” url=”app/webroot/{R:1}{R:2}” appendQueryString=”false” />
</rule>
<rule name=”Imported Rule 1″ stopProcessing=”true”>
<match url=”^(.*)$” ignoreCase=”false” />
<conditions logicalGrouping=”MatchAll”>
<add input=”{REQUEST_FILENAME}” matchType=”IsFile” negate=”true” />
</conditions>
<action type=”Rewrite” url=”index.php?url={R:1}” appendQueryString=”true” />
</rule>
<rule name=”Imported Rule 2″ stopProcessing=”true”>
<match url=”^$” ignoreCase=”false” />
<action type=”Rewrite” url=”/” />
</rule>
<rule name=”Imported Rule 3″ stopProcessing=”true”>
<match url=”(.*)” ignoreCase=”false” />
<action type=”Rewrite” url=”/{R:1}” />
</rule>
<rule name=”Imported Rule 4″ stopProcessing=”true”>
<match url=”^(.*)$” ignoreCase=”false” />
<conditions logicalGrouping=”MatchAll”>
<add input=”{REQUEST_FILENAME}” matchType=”IsFile” negate=”true” />
</conditions>
<action type=”Rewrite” url=”index.php?url={R:1}” appendQueryString=”true” />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>

以上でアクセスするとBasic認証が現れるはずです。