diff options
author | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:40:17 -0500 |
---|---|---|
committer | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:40:17 -0500 |
commit | 33058f2b292b3a581333bdfb21b8f671898c5060 (patch) | |
tree | 51c3e392513ec574331b2d3f85c394445ea803c6 /files/ja/mozilla/persona | |
parent | 8b66d724f7caf0157093fb09cfec8fbd0c6ad50a (diff) | |
download | translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.gz translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.bz2 translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.zip |
initial commit
Diffstat (limited to 'files/ja/mozilla/persona')
-rw-r--r-- | files/ja/mozilla/persona/browser_compatibility/index.html | 90 | ||||
-rw-r--r-- | files/ja/mozilla/persona/faq/index.html | 56 | ||||
-rw-r--r-- | files/ja/mozilla/persona/index.html | 155 | ||||
-rw-r--r-- | files/ja/mozilla/persona/internationalization/index.html | 52 | ||||
-rw-r--r-- | files/ja/mozilla/persona/quick_setup/index.html | 242 | ||||
-rw-r--r-- | files/ja/mozilla/persona/remote_verification_api/index.html | 125 | ||||
-rw-r--r-- | files/ja/mozilla/persona/security_considerations/index.html | 91 | ||||
-rw-r--r-- | files/ja/mozilla/persona/why_persona/index.html | 48 |
8 files changed, 859 insertions, 0 deletions
diff --git a/files/ja/mozilla/persona/browser_compatibility/index.html b/files/ja/mozilla/persona/browser_compatibility/index.html new file mode 100644 index 0000000000..e59ad2f5a1 --- /dev/null +++ b/files/ja/mozilla/persona/browser_compatibility/index.html @@ -0,0 +1,90 @@ +--- +title: ブラウザの互換性 +slug: Mozilla/Persona/Browser_compatibility +tags: + - Persona + - 要更新 +translation_of: Archive/Mozilla/Persona/Browser_compatibility +--- +<h2 id="Supported_Browsers" name="Supported_Browsers">サポートされたブラウザ</h2> +<p>Persona は、以下のブラウザで開発、テスト、サポートされています。Persona のクロスプラットフォームの JavaScript ライブラリのおかげで、ユーザは Persona を使うためにアドオンをインストールする必要はありません。</p> +<table> + <tbody> + <tr> + <th colspan="3" scope="row" style="text-align: center; background-color: #d3d7cf;"><strong>デスクトップブラウザ</strong></th> + </tr> + <tr> + <th scope="row"><strong>Internet Explorer</strong></th> + <td colspan="2" rowspan="1" style="background-color: #8ae234;">8.0<sup>*</sup>, 9.0<sup>†</sup> 10.0<sup>**</sup></td> + </tr> + <tr> + <th scope="row"><strong>Firefox</strong></th> + <td colspan="2" style="background-color: #8ae234;">現在の安定版、Beta、Aurora、Nightly、ESR<br> + 以前の安定リリース版</td> + </tr> + <tr> + <th scope="row"><strong>Chrome</strong></th> + <td colspan="2" style="background-color: #8ae234;">最新の安定リリース版</td> + </tr> + <tr> + <th scope="row"><strong>Safari</strong></th> + <td colspan="2" style="background-color: #8ae234;">最新の安定リリース版</td> + </tr> + <tr> + <th scope="row"><strong>Opera</strong></th> + <td colspan="2" style="background-color: #8ae234;">最新の安定リリース版<sup>‡</sup></td> + </tr> + <tr> + <th colspan="3" scope="row" style="text-align: center; background-color: #d3d7cf;"><strong>iOS ブラウザ</strong></th> + </tr> + <tr> + <th scope="row"><strong>Mobile Safari</strong></th> + <td colspan="2" rowspan="1" style="background-color: #8ae234;">iOS 5.x — 6.x</td> + </tr> + <tr> + <th colspan="3" scope="row" style="text-align: center; background-color: #d3d7cf;"><strong>Android ブラウザ</strong></th> + </tr> + <tr> + <th scope="row"><strong>デフォルトブラウザ</strong></th> + <td colspan="2" rowspan="1" style="background-color: #8ae234;">2.x — 4.x</td> + </tr> + <tr> + <th scope="row"><strong>Firefox</strong></th> + <td colspan="2" style="background-color: #8ae234;">現在の安定版、Beta、Aurora、Nightly、ESR<br> + 以前の安定リリース版</td> + </tr> + <tr> + <th scope="row"><strong>Chrome</strong></th> + <td colspan="2" style="background-color: #8ae234;">最新の安定リリース版</td> + </tr> + </tbody> +</table> +<p><sup>*</sup>: Windows XP 向け。 <sup>†</sup>: Windows Vista および Windows 7 向け。 <sup>‡</sup>: 時間の許す限り。</p> +<h2 id="Internet_Explorer_.22Compatibility_Mode.22" name="Internet_Explorer_.22Compatibility_Mode.22">Internet Explorer "Compatibility Mode"</h2> +<p>From version 8.0 onwards Internet Explorer supports a feature called Compatibility Mode, in which the browser may be instructed to emulate a pre-8.0 version when rendering a page. This feature may be controlled in three different ways</p> +<ol> + <li>as a local setting in the browser</li> + <li>based on the presence and value of the <a href="https://developer.mozilla.org/docs/Quirks_Mode_and_Standards_Mode" title="https://developer.mozilla.org/docs/Quirks_Mode_and_Standards_Mode">DOCTYPE</a> declaration in the page</li> + <li>as an instruction sent from the site, using the <a href="http://msdn.microsoft.com/library/cc288325%28v=vs.85%29.aspx" title="http://msdn.microsoft.com/library/cc288325%28v=vs.85%29.aspx">"X-UA-Compatible"</a> header either as an HTTP header or as a <a href="https://developer.mozilla.org/docs/HTML/Element/meta" title="https://developer.mozilla.org/docs/HTML/Element/meta"><code><meta></code></a> tag in the page. This method overrides the other two.</li> +</ol> +<p>Because versions of Internet Explorer earlier than 8.0 are not supported by Persona, any version of Internet Explorer which is configured to emulate a pre-8.0 version will also not function with Persona. This is typically for one of the following reasons:</p> +<ul> + <li>your site is using "X-UA-Compatible" to explicitly instruct the browser to emulate a pre-8.0 version</li> + <li>your site's pages omit the DOCTYPE, do not have the DOCTYPE as the first line of the page, or set the browser to quirks mode, and your site is not setting "X-UA-Compatible" to IE version 8.0 or higher</li> + <li>the browser is locally configured to use a pre-8.0 Compatibility Mode, and your site is not overriding this by setting "X-UA-Compatible" to IE version 8.0 or higher</li> +</ul> +<p>For more information, see <a href="https://blogs.msdn.com/b/askie/archive/2009/03/23/understanding-compatibility-modes-in-internet-explorer-8.aspx?Redirected=true" title="https://blogs.msdn.com/b/askie/archive/2009/03/23/understanding-compatibility-modes-in-internet-explorer-8.aspx?Redirected=true">"Understanding Compatibility Modes in Internet Explorer 8"</a> and <a href="http://hsivonen.iki.fi/doctype/index.html#ie8" title="http://hsivonen.iki.fi/doctype/index.html#ie8">"IE8 and IE9 Complications"</a>.</p> +<h2 id="Unsupported_Browsers" name="Unsupported_Browsers">サポートされていないブラウザ</h2> +<ul> + <li>Internet Explorer バージョン 6.0 および 7.0 はサポートされていません。ユーザはブラウザのアップグレードを求められます。</li> + <li>Google Chrome Frame はサポートされておらず機能しません。後でサポートが追加される予定です (<a href="https://github.com/mozilla/browserid/issues/796" title="https://github.com/mozilla/browserid/issues/796">Issue #796</a>)。</li> + <li>iOS 上のサードパーティ製ブラウザはサポートされておらず機能しません。後でサポートが追加される予定です (<a href="https://github.com/mozilla/browserid/issues/1870" title="https://github.com/mozilla/browserid/issues/1870">Issue #1870</a>, <a href="https://github.com/mozilla/browserid/issues/2034" title="https://github.com/mozilla/browserid/issues/2034">Issue #2034</a>)。</li> +</ul> +<h2 id="Other_Browsers" name="Other_Browsers">他のブラウザ</h2> +<p>サポートされていないブラウザでも、{{domxref("window.postMessage()")}} と {{domxref("Storage", "localStorage")}} が実装されていれば動作します。これらの API は 2010 年 3 月以降のすべての主要なブラウザで利用可能です。</p> +<h2 id="Known_Issues" name="Known_Issues">既知の問題</h2> +<ul> + <li>すべての機能を動作させるには、ブラウザでサードパーティの Cookie を許可する必要があります (<a href="https://github.com/mozilla/browserid/issues/1352" title="https://github.com/mozilla/browserid/issues/1352">Issue #1352</a>)。</li> + <li>デフォルトのブラウザを選択していない Android 2.x ユーザはログインできません (<a href="https://github.com/mozilla/browserid/issues/1854" title="https://github.com/mozilla/browserid/issues/1854">Issue #1854</a>)。</li> + <li>Internet Explorer 9 で IE8 のエミュレートを強制した場合、サイトへのログインに失敗する可能性があります。</li> +</ul> diff --git a/files/ja/mozilla/persona/faq/index.html b/files/ja/mozilla/persona/faq/index.html new file mode 100644 index 0000000000..ee4de1f8e7 --- /dev/null +++ b/files/ja/mozilla/persona/faq/index.html @@ -0,0 +1,56 @@ +--- +title: FAQ +slug: Mozilla/Persona/FAQ +translation_of: Archive/Mozilla/Persona/FAQ +--- +<h2 id="BrowserID_との違いは何ですか?">BrowserID との違いは何ですか?</h2> +<p>Persona は Mozilla による新しい分散ログインシステムの完全な実装です。</p> +<p>BrowserID は Persona がどのように動作するかを規定するオープンなプロトコルです。</p> +<p>Persona は BrowserID の実装によって Web サイトにユーザーがログインできるようにするものです。それに類似する関係として、Firefox は HTTP の実装によって、ユーザーが Web を閲覧できるようにするものです。</p> +<h2 id="OpenID_との違いは何ですか?">OpenID<span style="font-size: 2.14285714285714rem;"> との違いは何ですか?</span></h2> +<p>Persona と OpenID の目的と構造は非常に似ています。どちらのシステムも、ユーザーが所持しなければならないパスワードを減らすことができます。また、どちらも非集中型のシステムとして設計されています。<span style="line-height: 1.5;">This means that any domain can present itself as an Identity Provider without relying on a central authority.</span></p> +<p>Despite these similarities, Persona is easier to use and easier to add to websites. Persona also does a better job of protecting user privacy. Specifically:</p> +<dl> + <dt> + Persona はユーザーに易しいシステムです</dt> + <dd> + Persona identifies users based on email addresses, which users already know, understand, and naturally associate with online identities. With OpenID, users are forced to learn a new username: an unintuitive URL.</dd> + <dd> + Logging in with Persona is also easier: it just takes 2 clicks after a one-time setup process.</dd> + <dt> + Persona <span style="line-height: 1.5;">は開発者に易しいシステムです</span></dt> + <dd> + Persona has a {{ domxref("navigator.id", "simple API") }} that only takes an afternoon to get started with.</dd> + <dd> + Persona identities <em>are</em> email addresses, so websites don't have to ask users for additional contact information during signup.</dd> + <dd> + Because users know and understand their email address, developers don't have to build complex pages with login buttons for all the popular OpenID providers.</dd> + <dt> + Persona はより適切にユーザーのプライバシーを保護します</dt> + <dd> + By design, OpenID allows Identity Providers to track their users around the web: whenever a user logs into a website, their browser gets redirected from that site to the user's Identity Provider, and then back to the site that the user requested. These redirects fully expose to the Identity Provider where the user is going.</dd> + <dd> + In contrast, the BrowserID protocol never leaks tracking information back to the Identity Provider. Rather, it behaves similarly to an ID card: users obtain signed credentials from their Identity Providers which can be presented to websites as a proof of identity. Websites can check the validity of these credentials without ever revealing a user's identity to their identity provider.</dd> +</dl> +<h2 id="なぜ_Persona_には_JavaScript_が必要なのですか?">なぜ <span style="font-size: 2.14285714285714rem;">Persona</span><span style="font-size: 2.14285714285714rem;"> </span><span style="font-size: 2.14285714285714rem;">には</span><span style="font-size: 2.14285714285714rem;"> JavaScript が必要なのですか?</span></h2> +<p>Persona requires JavaScript, but some users choose to selectively block JavaScript by using browser add-ons like NoScript. Many of these users are concerned about the privacy implications of enabling JavaScript, since it is often used to track visitors across websites.</p> +<p>However, in the case of Persona, JavaScript is actually used to enhance user privacy, as it allows the browser to perform cryptographic operations completely on the client side. By doing these operations on the client, Persona avoids the need to store secret keys anywhere other than in the user's own browser.</p> +<h2 id="Persona_は登録されたメールアドレスが現在使用されているかどうかを確認しますか?">Persona は<span style="font-size: 2.14285714285714rem;">登録された</span><span style="font-size: 2.14285714285714rem;">メールアドレスが</span><span style="font-size: 2.14285714285714rem;">現在使用されているかどうかを確認しますか?</span></h2> +<p>No, Persona only guarantees the user's association with an address. As with any email address in any login system, it's possible that the address no longer works or is not regularly checked by the user. For most users, the email address will be functional.</p> +<h2 id="どのようにしてメールアドレスから所属団体を確かめるのですか?">どのようにしてメールアドレスから所属団体を確かめるのですか?</h2> +<p>Persona asks the address's domain, which is free to verify its users in any way it chooses. If a domain is not a native Identity Provider, and thus can't verify its own users, the browser asks for verification from Persona's fallback Identity Provider at <a href="https://login.persona.org" title="https://login.persona.org">https://login.persona.org</a>. Before certifying a user's identity, the fallback Identity Provider does test the address by sending an email to it and asking the user to click a link contained within.</p> +<h2 id="どのような方法で、ユーザーが管理できなくなったメールアドレスのアカウントを復旧させることができますか?">どのような方法で、ユーザーが管理できなくなったメールアドレスのアカウントを復旧させることができますか?</h2> +<p>The best way to do this is to allow your users to add a secondary email address to their account. See <a href="/en-US/docs/Persona/The_implementor_s_guide/Adding_extra_email_addresses_with_Persona" title="/en-US/docs/Persona/The_implementor_s_guide/Adding_extra_email_addresses_with_Persona">"Adding extra email addresses with Persona"</a>.</p> +<h2 id="include.js_を独自にホストすることはできますか?_あるいは、httpslogin.persona.org_にあるものを使用しなければなりませんか?">include.js を独自にホストすることはできますか? あるいは、<a class="link-https" href="https://login.persona.org" rel="freelink">https://login.persona.org</a> にあるものを使用しなければなりませんか?</h2> +<p>The code in <code>include.js</code> is still subject to change. It's not yet recommended that you host it yourself.</p> +<h2 id="アサーションをローカルで確認することはできますか?_あるいは、リモートの確認サービスを使う必要がありますか?">アサーションをローカルで確認することはできますか? あるいは、リモートの確認サービスを使う必要がありますか?</h2> +<p>To ensure user privacy, it's important that identity assertions are verified locally rather than with the remote verification service. However, the format of assertions is still subject to change, so local verification is not yet recommended. Even with remote verification, Persona protects the user from tracking by their identity provider.</p> +<p>Once the protocol has stabilized, libraries will be available to simplify local verification. Follow the <a class="external" href="http://identity.mozilla.com/" title="http://identity.mozilla.com/">Identity Blog</a> to find out when local verification is recommended.</p> +<h2 id="ほかのサインイン手段を利用しているユーザーが移行するために何か良い方法はありますか?">ほかのサインイン手段を利用しているユーザーが移行するために何か良い方法はありますか?</h2> +<p>Despite Persona's benefits, it's never easy to move all of your users to a new login system. Conveniently, Persona's focus on email addresses makes it easy to use alongside existing login systems, so you don't have to switch all at once.</p> +<p>One particularly low-friction approach is to suggest Persona to users who forget their password. Instead of resetting passwords, users can simply log in with Persona.</p> +<h2 id="新規アカウントを作成する際にも「サインイン」として扱われることを、どのようにして知らせるべきですか?">新規アカウントを作成する際にも<span style="font-size: 2.14285714285714rem;">「サインイン」として扱われることを</span><span style="font-size: 2.14285714285714rem;">、どのようにして知らせるべきですか?</span></h2> +<h2 id="新しい_API_や非推奨の_API_など、BrowserID_との主な違いはどのようにして調べられますか?"><span style="font-size: 2.14285714285714rem;">新しい API や非推奨の API など、</span><span style="font-size: 2.14285714285714rem;">BrowserID との主な違いはどのようにして調べられますか?</span></h2> +<p>All major, backwards incompatible changes and deprecations are announced on the low-volume <a href="https://mail.mozilla.org/listinfo/persona-notices" title="https://mail.mozilla.org/listinfo/persona-notices">persona-notices</a> mailing list. Please subscribe to it.</p> +<p>To find out about new features and enhancements, follow the the <a href="http://identity.mozilla.com/" title="http://identity.mozilla.com/">Identity team blog</a>.</p> +<p>For development discussion, subscribe to the <a class="link-https" href="https://lists.mozilla.org/listinfo/dev-identity" title="https://lists.mozilla.org/listinfo/dev-identity">dev-identity</a><span class="link-https"> mailing list</span>.</p> diff --git a/files/ja/mozilla/persona/index.html b/files/ja/mozilla/persona/index.html new file mode 100644 index 0000000000..64ce7689e6 --- /dev/null +++ b/files/ja/mozilla/persona/index.html @@ -0,0 +1,155 @@ +--- +title: Persona +slug: Mozilla/Persona +tags: + - Persona +translation_of: Archive/Mozilla/Persona +--- +<div class="callout-box"> + <p><strong>Stay in touch or get help!</strong></p> + <p>Follow <a class="external" href="http://identity.mozilla.com/" title="http://identity.mozilla.com/">our blog</a>, join <a class="link-https" href="https://lists.mozilla.org/listinfo/dev-identity" title="https://lists.mozilla.org/listinfo/dev-identity">our mailing list</a>, or find us in <a class="link-irc" href="irc://irc.mozilla.org/identity" title="irc://irc.mozilla.org/identity">#identity</a> on <a class="link-https" href="https://wiki.mozilla.org/IRC" title="https://wiki.mozilla.org/IRC"> IRC</a>.</p> +</div> +<p><a class="link-https" href="https://www.mozilla.org/persona/" title="https://www.mozilla.org/persona/">Mozilla Persona</a> は、オープンな BrowserID 規格に基づいた、Web サービス向けの完全に分散化された、安全な認証システムです。Persona がどのようなサイトでも、また誰が使おうとも確実に動作するように、Mozilla では現在、<a href="/ja/docs/Persona/Bootstrapping_Persona" title="Persona/Bootstrapping_Persona">小規模なサイトを運営しています。</a></p> +<p>なぜ、あなたのサイトで Persona を使うべきなのでしょう?</p> +<ol> + <li><strong>Persona を使うことで、サイトごとにパスワードを管理する必要がなくなります。</strong>ユーザ、Web サイト運営者ともに、パスワードの作成、管理、セキュリティ強度といったことに頭を悩ませる必要がなくなります。</li> + <li><strong>Persona は簡単に使うことができます。</strong>Persona を使うユーザなら、例えば <a href="http://voo.st" title="http://voo.st">Voost</a> や <a href="http://crossword.thetimes.co.uk/" title="http://crossword.thetimes.co.uk/">The Times Crossword</a> といったサイトに新たに登録する際にも、ほんの2クリックの作業だけでログインすることができます。もう繁雑な登録作業は不要です。</li> + <li><strong>Persona は実装するのも簡単です。</strong>Web サイトに Persona を導入する作業は、わずか半日で完了します。</li> + <li>特筆すべき長所として、<strong>アカウントの閉め出し</strong>の心配がありません。Persona を使うことで、Web サイトの運営者が全登録ユーザの有効なメールアドレスを取得することができます。また、ユーザはどんなメールアドレスでも登録することができます。</li> + <li><strong>Persona は BrowserID に準拠しています。</strong>主要なブラウザベンダが BrowserID を実装してしまえば、<b>ログインにあたって Mozilla に依存し続ける必要はなくなります。</b></li> +</ol> +<p>Read on to get started!</p> +<div class="note"> + <strong>注意:</strong> Persona は現在活発に開発が進められています。新しい機能については、<a class="external" href="http://identity.mozilla.com/" title="http://identity.mozilla.com/">私たちのブログ</a> をご覧ください。また、<a class="link-https" href="https://lists.mozilla.org/listinfo/dev-identity" title="https://lists.mozilla.org/listinfo/dev-identity">メーリングリスト</a> にてフィードバックをお寄せください!</div> +<h2 id="Using_Persona_on_your_site" name="Using_Persona_on_your_site">あなたのサイトで Persona を使うために</h2> +<table class="topicpage-table"> + <tbody> + <tr> + <td> + <h3 id="Getting_started" name="Getting_started">はじめに</h3> + <dl> + <dt> + <a href="/ja/docs/Persona/Why_Persona" title="Persona/Why_Persona">なぜ Persona?</a></dt> + <dd> + まずはあなたのサイトを Persona に対応させる利点について説明します。また、他の認証システムとの比較も紹介します。</dd> + <dt> + <a href="/ja/docs/Persona/Quick_Setup" title="Persona/Quick setup">クイックセットアップ</a></dt> + <dd> + Web サイトで Persona をサポートする手順について、簡単に説明します。</dd> + </dl> + </td> + <td> + <h3 id="Persona_API_reference" name="Persona_API_reference">Persona API リファレンス</h3> + <dl> + <dt> + <a href="/ja/docs/DOM/navigator.id" title="DOM/navigator.id">navigator.id API リファレンス</a></dt> + <dd> + <code>navigator.id</code> オブジェクトのリファレンスです。 Persona についての作業はここが起点となります。</dd> + <dt> + <a href="/ja/docs/Persona/Remote_Verification_API" title="Persona/Remote_Verification_API">Verification API リファレンス</a></dt> + <dd> + <code>https://verifier.login.persona.org/verify</code> でホストされたリモート検証 API のリファレンスです。</dd> + </dl> + </td> + </tr> + <tr> + <td> + <h3 id="Guides" name="Guides">ガイド</h3> + <dl> + <dt> + <a href="/ja/docs/Persona/Security_Considerations" title="Persona/Security considerations">セキュリティについて考慮すべき事柄</a></dt> + <dd> + Practices and techniques to make sure your Persona deployment is secure.</dd> + <dt> + <a href="/ja/docs/Persona/Browser_compatibility" title="Persona/Browser_compatibility">ブラウザの互換性</a></dt> + <dd> + Persona をサポートしているブラウザのリスト。</dd> + <dt> + <a href="/ja/docs/Persona/Internationalization" title="Persona/Internationalization">国際化</a></dt> + <dd> + Persona の異なる言語の扱いについて。</dd> + </dl> + </td> + <td> + <h3 id="Resources" name="Resources">リソース</h3> + <dl> + <dt> + <a class="link-https" href="https://github.com/mozilla/browserid/wiki/Persona-Libraries" title="https://github.com/mozilla/browserid/wiki/BrowserID-Libraries">ライブラリとプラグイン</a></dt> + <dd> + Find a drop-in library for your favorite programming language, web framework, blog, or content management system.</dd> + <dt> + <a class="link-https" href="https://github.com/mozilla/browserid-cookbook" title="https://github.com/mozilla/browserid-cookbook">Persona cookbook</a></dt> + <dd> + Example source code for Persona sites. Includes snippets in PHP, Node.JS, and more.</dd> + <dt> + <a href="/ja/docs/Persona/branding" title="persona/branding">ブランドリソース</a></dt> + <dd> + Sign in buttons and other graphics to help present Persona to your users.</dd> + </dl> + </td> + </tr> + </tbody> +</table> +<table class="topicpage-table"> + <tbody> + <tr> + <td> + <h2 id="Information_for_Identity_Providers" name="Information_for_Identity_Providers">ID プロバイダについての情報</h2> + <p>If you're an email provider or another identity-providing service, check out the links below to learn about becoming a Persona Identity Provider.</p> + <dl> + <dt> + <a href="/ja/docs/Persona/Identity_Provider_Overview" title="IdP Overview">IdP の概要</a></dt> + <dd> + A high level view of Persona Identity Providers.</dd> + <dt> + <a href="/ja/docs/Persona/Implementing_a_Persona_IdP" title="Guide to Implementing a Persona IdP">IdP の実装方法</a></dt> + <dd> + A detailed guide to the technical details of becoming an IdP.</dd> + <dt> + <a href="/ja/docs/Persona/IdP_Development_tips" title="Developer tips">開発のヒント</a></dt> + <dd> + A set of tips and tricks useful while developing a new Identity Provider.</dd> + <dt> + <a href="/ja/docs/Persona/.well-known-browserid" title="Persona/.well-known-browserid">.well-known/browserid</a></dt> + <dd> + An overview of the structure and purpose of the <code>.well-known/browserid</code> file, which IdPs use to advertise their support for the protocol.</dd> + </dl> + </td> + <td> + <h2 id="The_Persona_Project" name="The_Persona_Project">Persona プロジェクト</h2> + <dl> + <dt> + <a href="/ja/docs/Persona/Glossary" title="/Persona/Glossary">用語集</a></dt> + <dd> + BrowserID and Persona terminology defined.</dd> + <dt> + <a href="/ja/docs/Persona/FAQ" title="/Persona/FAQ">よくある質問</a></dt> + <dd> + よくある質問への回答</dd> + <dt> + <a href="/ja/docs/Persona/Protocol_Overview" title="/Persona/Protocol overview">プロトコルの概要</a></dt> + <dd> + A mid-level technical overview of the underlying BrowserID protocol.</dd> + <dt> + <a href="/ja/docs/Persona/Crypto" title="Persona/Crypto">Crypto</a></dt> + <dd> + A look at the cryptographic concepts behind Persona and BrowserID.</dd> + <dt> + <a class="link-https" href="https://github.com/mozilla/id-specs/blob/master/browserid/index.md" title="https://github.com/mozilla/id-specs/blob/master/browserid/index.md">仕様書</a></dt> + <dd> + ここには深い技術の詳細が書かれています。</dd> + <dt> + <a href="/ja/docs/Persona/Bootstrapping_Persona" title="/Persona/Bootstrapping_Persona">Persona の Web サイト</a></dt> + <dd> + To get Persona going, we're hosting three services at <a class="link-https" href="https://login.persona.org" rel="freelink">https://login.persona.org</a>: a fallback Identity Provider, a portable implementation of the {{domxref("navigator.id")}} APIs, and an identity assertion verification service.</dd> + <dt> + <a href="https://github.com/mozilla/browserid">Persona のソースコード</a></dt> + <dd> + The code behind the Persona website lives in a repository on GitHub. Patches welcome!</dd> + </dl> + </td> + </tr> + </tbody> +</table> +<p> </p> +<p><img id="firefoxsddsinfoimg" style="display: none; position: absolute; top: 0px; left: 0px; width: 32px; height: 32px;"><img id="firefoxsddsarrowimg" style="display: none; position: absolute; top: 1885px; left: 534px; width: 32px; height: 32px;"></p> diff --git a/files/ja/mozilla/persona/internationalization/index.html b/files/ja/mozilla/persona/internationalization/index.html new file mode 100644 index 0000000000..81f3e2c95d --- /dev/null +++ b/files/ja/mozilla/persona/internationalization/index.html @@ -0,0 +1,52 @@ +--- +title: I18N +slug: Mozilla/Persona/Internationalization +tags: + - BrowserID + - Persona + - l10n +translation_of: Archive/Mozilla/Persona/Internationalization +--- +<h2 id="Persona_のローカライズ">Persona のローカライズ</h2> +<p>将来、Persona によるサインインのユーザインターフェースがブラウザに統合され、Persona のローカライズはブラウザアプリケーションのローカライズと一緒に行われるようになるでしょう。Persona が統合されていないブラウザにおける Persona のユーザインターフェースは <a href="https://login.persona.org" title="https://login.persona.org">login.persona.org</a> からのダイアログで構成されます。これらのダイアログは、コミュニティのボランティアチームにより翻訳されており、現在 45 か国の言語で <a href="https://github.com/mozilla/browserid/blob/dev/config/l10n-prod.json" title="https://github.com/mozilla/browserid/blob/dev/config/l10n-prod.json">提供されています</a>。</p> +<h2 id="Persona_の言語選択について">Persona の言語選択について</h2> +<p>Persona サービスは、ブラウザ側の要求により送信された <code>Accept-Language</code> ヘッダを利用して言語を選択します。<code>Accept-Language</code> ヘッダを言語に割り当てるアルゴリズムは、<code>mozilla.org</code> で使用されているものと同じです:</p> +<ol> + <li><code>Accept-Language</code> ヘッダの各言語タグに対して: + <ul> + <li>言語タグにより認識された言語と一致するローカライズ済みの言語があるか確認する</li> + <li>言語タグの最初の部分により認識された言語と一致するローカライズ済みの言語があるか確認する</li> + </ul> + </li> + <li>ルール (1) で一致しなかった場合は en-US にフォールバックします。しかしながら、en や en-US はブラウザから送信される accept-lang ヘッダの最後に書かれていることがほとんどです。</li> +</ol> +<p>例えば、以下の表は、<code>en-US, es, es-MX</code> がサポートされている場合に、送信された <code>Accept-Language</code> ヘッダから選択される言語のリストです:</p> +<table> + <thead> + <tr> + <th scope="col"><strong>Accept-Language ヘッダ</strong></th> + <th scope="col"><strong>選択される言語</strong></th> + </tr> + </thead> + <tbody> + <tr> + <td><code>es-AR,es;q=0.8,en-us;q=0.5</code></td> + <td><code>es</code></td> + </tr> + <tr> + <td><code>es-MX,es;q=0.8,en-us;q=0.5</code></td> + <td><code>es-MX</code></td> + </tr> + <tr> + <td><code>e</code><code>s-es,en-us;q=0.5</code></td> + <td><code>en-US</code></td> + </tr> + <tr> + <td><code>e</code><code>s-es</code></td> + <td><code>en-US</code></td> + </tr> + </tbody> +</table> +<p>現在は、Web サイト側からダイアログを別の言語に変更する方法はありません。これは、Persona の UI が論理的にブラウザの一部である (将来、ブラウザにネイティブ実装される) ことが理由です。そのため、ダイアログの言語はブラウザの UI と同じ言語であるべきです。</p> +<h2 id="ローカライズに協力するには">ローカライズに協力するには</h2> +<p>Persona は、Mozilla Verbatim を利用してボランティアが新しい言語を追加できるようにしています。ローカライズに協力したい方は、<a href="/docs/Localizing_with_Verbatim" title="/docs/Localizing_with_Verbatim">はじめての Verbatim</a> をお読みください。実際の作業は、Verbatim サイトの <a href="https://localize.mozilla.org/projects/browserid/" title="https://localize.mozilla.org/projects/browserid/">"BrowserID" プロジェクト</a> で行います。</p> diff --git a/files/ja/mozilla/persona/quick_setup/index.html b/files/ja/mozilla/persona/quick_setup/index.html new file mode 100644 index 0000000000..00fecb5c44 --- /dev/null +++ b/files/ja/mozilla/persona/quick_setup/index.html @@ -0,0 +1,242 @@ +--- +title: クイックセットアップ +slug: Mozilla/Persona/Quick_Setup +tags: + - Persona +translation_of: Archive/Mozilla/Persona/Quick_Setup +--- +<p>たった 5 つの手順であなたのサイトに Persona のログインシステムを追加できます:</p> + +<ol> + <li>Persona の JavaScript ライブラリをページに含める。</li> + <li>ログインボタンとログアウトボタンを追加する。</li> + <li>ログインとログアウトの操作を監視する。</li> + <li>ユーザの信用情報を検証する。</li> + <li>ベストプラクティスを見直す。</li> +</ol> + +<p>Persona は、半日もあればあなたのサイトに追加できます。ただし、重要なものから順番に行ってください: Persona をあなたのサイトで利用しようとするときは、その前に <a href="https://mail.mozilla.org/listinfo/persona-notices">Persona notices</a> メーリングリストを購読してください。メールのやりとりはとても少ないですが、あなたのサイトに悪影響を及ぼす可能性のある変更をアナウンスするために使われます。</p> + +<h2 id="Step_1.3A_Include_the_Persona_library" name="Step_1.3A_Include_the_Persona_library">ステップ 1: Persona ライブラリを含める</h2> + +<p>Persona は、ブラウザ中立で設計されており、<a href="/ja/docs/persona/Browser_compatibility">すべての主要なデスクトップ版とモバイル版</a><a href="/ja/docs/persona/Browser_compatibility">のブラウザ</a> で動作します。</p> + +<p>私たちは将来、ブラウザ群がPersonaに母国語の支援を提供するだろうと考えていますが、その間、私たちはユーザーインターフェースとクライアント側のプロトコルを全て備えたJavascriptのライブラリを提供します。</p> + +<p>このライブラリが一度ページに読み込まれれば、必要な Persona 関数 ({{domxref("navigator.id.watch()", "watch()")}} および {{domxref("navigator.id.request()", "request()")}}, {{domxref("navigator.id.logout()", "logout()")}}) がグローバルな <code>navigator.id</code> オブジェクトで利用可能になります。</p> + +<p>Persona JavaScript ライブラリをページに含めるには、以下の <code>script</code> タグをページのヘッダ(page bodyの末尾)に置いてください:</p> + +<pre class="brush: html;"><script src="https://login.persona.org/include.js"></script> +</pre> + +<p>このコードは、{{domxref("navigator.id")}} 関数を使用するすべてのページに <strong>含めなければなりません</strong>。なぜならPersona はまだ開発段階であり、<code>include.js</code> ファイルをあなた自身でホストすべきではないからです。</p> + +<h3 id="Suppressing_Compatibility_Mode" name="Suppressing_Compatibility_Mode">互換性モードの制限</h3> + +<p>Personaを破綻させるため、Internet Explorerのユーザーが互換性モードを使用できないことも確認すべきです。以下をしてください。</p> + +<ul> + <li><code>すべてscript elementsの前に<meta http-equiv="X-UA-Compatible" content="IE=Edge"></code> をあなたのページに含める。</li> + <li>もしくはあなたのページに以下のHTTP ヘッダを設定する。 <code>X-UA-Compatible: IE=Edge</code>.</li> +</ul> + +<p>For more information, see the notes in <a href="/ja/docs/persona/Browser_compatibility#Internet_Explorer_.22Compatibility_Mode.22" title="persona/Browser_compatibility#Internet_Explorer_.22Compatibility_Mode.22">IE Compatibility Mode</a> and <a href="http://hsivonen.iki.fi/doctype/index.html#ie8" title="http://hsivonen.iki.fi/doctype/index.html#ie8">"IE8 and IE9 Complications"</a>.</p> + +<h2 id="Step_2.3A_Add_login_and_logout_buttons" name="Step_2.3A_Add_login_and_logout_buttons">ステップ 2: ログインとログアウトのボタンを追加する</h2> + +<p>Persona は DOM API として設計されているため、ユーザがサイト上のログインまたはログアウトボタンをクリックした時に関数を呼び出さなければなりません。Persona ダイアログを開いてユーザがログインできるようにするには、{{domxref("navigator.id.request()")}} を呼び出します。ログアウトする時は {{domxref("navigator.id.logout()")}} を呼び出します。</p> + +<p>Note, the call to {{ domxref("navigator.id.logout()", "logout()") }} <em>must</em> be made in the click handler of the logout button.</p> + +<p>コード例:</p> + +<pre class="brush: js;">var signinLink = document.getElementById('signin'); +if (signinLink) { + signinLink.onclick = function() { navigator.id.request(); }; +}; + +var signoutLink = document.getElementById('signout'); +if (signoutLink) { + signoutLink.onclick = function() { navigator.id.logout(); }; +}; +</pre> + +<p>これらのボタンの外観については、<a href="/ja/docs/persona/branding">ブランドリソース</a> ページのボタン画像や CSS ベースのボタンをご利用ください。</p> + +<h2 id="Step_3.3A_Watch_for_login_and_logout_actions" name="Step_3.3A_Watch_for_login_and_logout_actions">ステップ 3: ログインとログアウトの操作を監視する</h2> + +<p>Persona を機能させるために、ユーザがログインまたはログアウトした時に何を行うかを知らせる必要があります。これは、{{domxref("navigator.id.watch()")}} 関数に 3 個の引数を与えて呼び出すことにより行えます:</p> + +<ol> + <li>コンピューターから現在あなたのサイトにログインしているユーザーのemailアドレス。ユーザがいない場合は <code>null</code> です。例えば、誰がサインインしているのか確かめるためにブラウザのCookieを調べることでしょう。</li> + <li><code>onlogin</code> 操作のトリガーが引かれた時に呼び出す関数。この関数には、検証された「ID アサーション」の引数を 1 個渡します。</li> + <li><code>onlogout</code> 操作のトリガーが引かれた時に呼び出す関数。この関数には引数を渡しません。</li> +</ol> + +<div class="note style-wrap"> +<p><strong>注意:</strong> {{domxref("navigator.id.watch()")}} を呼び出した時は、常に <code>onlogin</code> と <code>onlogout</code> の両方を含めなければなりません。</p> +</div> + +<p>例えば、あなたが"Bob"で現在あなたのサイトにログインしていると考える場合、次のように書きます:</p> + +<pre class="brush: js;">var currentUser = 'bob@example.com'; + +navigator.id.watch({ + loggedInUser: currentUser, + onlogin: function(assertion) { + // ユーザがログインしました! ここで必要なことは: + // 1. 検証してセッションを作成するため、アサーションをバックエンドに送信する。 + // 2. UI を更新する。 + $.ajax({ /* <-- この例では jQuery を使いますが、他のものも使えます */ + type: 'POST', + url: '/auth/login', // これは、あなたの Web サイト上の URL です。 + data: {assertion: assertion}, + success: function(res, status, xhr) { window.location.reload(); }, + error: function(res, status, xhr) { alert("login failure" + res); } + }); + }, + onlogout: function() { + // ユーザがログアウトしました! ここで必要なことは: + // リダイレクトするかバックエンドの呼び出しを行って、ユーザのセッションを破棄する。 + $.ajax({ + type: 'POST', + url: '/auth/logout', // これは、あなたの Web サイト上の URL です。 + success: function(res, status, xhr) { window.location.reload(); }, + error: function(res, status, xhr) { alert("logout failure" + res); } + }); + } +}); +</pre> + +<p>このコード例では、非同期の <code>POST</code> リクエストをサイトのバックエンドで行う <code>onlogin</code> と <code>onlogout</code> の両方が実装されています。バックエンドでは、セッション Cookie 内の情報を設定または削除することによりユーザのログインまたはログインが記録されます。そして、すべてが正しく一致したら、ページが再読み込みしてアカウントを新しいログイン状態にします。</p> + +<p>もちろん、AJAX を用いて再読み込みやリダイレクトなしでこれを実装することもできますが、このチュートリアルでは扱いません。</p> + +<p>もしID assertionが証明できなかったとき、{{ domxref("navigator.id.logout()") }}を呼びだすべきことに注意してください。これはPersonaに現在誰もログインしていないことを教える働きがあり、それをしないと、Personaは同じassertionでonloginをまた直ちに呼び出し、それが<a href="https://developer.mozilla.org/en-US/docs/Persona/The_implementor_s_guide/Call_logout%28%29_after_a_failed_login" title="/en-US/docs/Persona/The_implementor_s_guide/Call_logout()_after_a_failed_login">endless loop of failed logins</a>につながるかもしれません。</p> + +<p>次の例を示します。今度はjQueryをつかいません。</p> + +<pre class="brush: js; language-js"><code class="language-js"><span class="keyword token">function</span> <span class="function token">simpleXhrSentinel<span class="punctuation token">(</span></span>xhr<span class="punctuation token">)</span> <span class="punctuation token">{</span> + <span class="keyword token">return</span> <span class="keyword token">function</span><span class="punctuation token">(</span><span class="punctuation token">)</span> <span class="punctuation token">{</span> + <span class="keyword token">if</span> <span class="punctuation token">(</span>xhr<span class="punctuation token">.</span>readyState <span class="operator token">==</span> <span class="number token">4</span><span class="punctuation token">)</span> <span class="punctuation token">{</span> + <span class="keyword token">if</span> <span class="punctuation token">(</span>xhr<span class="punctuation token">.</span>status <span class="operator token">==</span> <span class="number token">200</span><span class="punctuation token">)</span><span class="punctuation token">{</span> + <span class="comment token"> // reload page to reflect new login state +</span> window<span class="punctuation token">.</span>location<span class="punctuation token">.</span><span class="function token">reload<span class="punctuation token">(</span></span><span class="punctuation token">)</span><span class="punctuation token">;</span> + <span class="punctuation token">}</span> + <span class="keyword token">else</span> <span class="punctuation token">{</span> + navigator<span class="punctuation token">.</span>id<span class="punctuation token">.</span><span class="function token">logout<span class="punctuation token">(</span></span><span class="punctuation token">)</span><span class="punctuation token">;</span> + <span class="function token">alert<span class="punctuation token">(</span></span><span class="string token">"XMLHttpRequest error: "</span> <span class="operator token">+</span> xhr<span class="punctuation token">.</span>status<span class="punctuation token">)</span><span class="punctuation token">;</span> + <span class="punctuation token">}</span> + <span class="punctuation token">}</span> + <span class="punctuation token">}</span> + <span class="punctuation token">}</span> + +<span class="keyword token">function</span> <span class="function token">verifyAssertion<span class="punctuation token">(</span></span>assertion<span class="punctuation token">)</span> <span class="punctuation token">{</span> + <span class="comment token"> // Your backend must return HTTP status code 200 to indicate successful +</span> <span class="comment token"> // verification of user's email address and it must arrange for the binding +</span> <span class="comment token"> // of currentUser to said address when the page is reloaded +</span> <span class="keyword token">var</span> xhr <span class="operator token">=</span> <span class="keyword token">new</span> <span class="class-name token">XMLHttpRequest</span><span class="punctuation token">(</span><span class="punctuation token">)</span><span class="punctuation token">;</span> + xhr<span class="punctuation token">.</span><span class="function token">open<span class="punctuation token">(</span></span><span class="string token">"POST"</span><span class="punctuation token">,</span> <span class="string token">"/xhr/sign-in"</span><span class="punctuation token">,</span> <span class="keyword token">true</span><span class="punctuation token">)</span><span class="punctuation token">;</span> + <span class="comment token"> // see http://www.openjs.com/articles/ajax_xmlhttp_using_post.php +</span> <span class="keyword token">var</span> param <span class="operator token">=</span> <span class="string token">"assertion="</span><span class="operator token">+</span>assertion<span class="punctuation token">;</span> + xhr<span class="punctuation token">.</span><span class="function token">setRequestHeader<span class="punctuation token">(</span></span><span class="string token">"Content-type"</span><span class="punctuation token">,</span> <span class="string token">"application/x-www-form-urlencoded"</span><span class="punctuation token">)</span><span class="punctuation token">;</span> + xhr<span class="punctuation token">.</span><span class="function token">setRequestHeader<span class="punctuation token">(</span></span><span class="string token">"Content-length"</span><span class="punctuation token">,</span> param<span class="punctuation token">.</span>length<span class="punctuation token">)</span><span class="punctuation token">;</span> + xhr<span class="punctuation token">.</span><span class="function token">setRequestHeader<span class="punctuation token">(</span></span><span class="string token">"Connection"</span><span class="punctuation token">,</span> <span class="string token">"close"</span><span class="punctuation token">)</span><span class="punctuation token">;</span> + xhr<span class="punctuation token">.</span><span class="function token">send<span class="punctuation token">(</span></span>param<span class="punctuation token">)</span><span class="punctuation token">;</span><span class="comment token"> // for verification by your backend +</span> + xhr<span class="punctuation token">.</span>onreadystatechange <span class="operator token">=</span> <span class="function token">simpleXhrSentinel<span class="punctuation token">(</span></span>xhr<span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="punctuation token">}</span> + +<span class="keyword token">function</span> <span class="function token">signoutUser<span class="punctuation token">(</span></span><span class="punctuation token">)</span> <span class="punctuation token">{</span> + <span class="comment token"> // Your backend must return HTTP status code 200 to indicate successful +</span> <span class="comment token"> // sign out (usually the resetting of one or more session variables) and +</span> <span class="comment token"> // it must arrange for the binding of currentUser to 'null' when the page +</span> <span class="comment token"> // is reloaded +</span> <span class="keyword token">var</span> xhr <span class="operator token">=</span> <span class="keyword token">new</span> <span class="class-name token">XMLHttpRequest</span><span class="punctuation token">(</span><span class="punctuation token">)</span><span class="punctuation token">;</span> + xhr<span class="punctuation token">.</span><span class="function token">open<span class="punctuation token">(</span></span><span class="string token">"GET"</span><span class="punctuation token">,</span> <span class="string token">"/xhr/sign-out"</span><span class="punctuation token">,</span> <span class="keyword token">true</span><span class="punctuation token">)</span><span class="punctuation token">;</span> + xhr<span class="punctuation token">.</span><span class="function token">send<span class="punctuation token">(</span></span><span class="keyword token">null</span><span class="punctuation token">)</span><span class="punctuation token">;</span> + xhr<span class="punctuation token">.</span>onreadystatechange <span class="operator token">=</span> <span class="function token">simpleXhrSentinel<span class="punctuation token">(</span></span>xhr<span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="punctuation token">}</span> +<span class="comment token"> +// Go! +</span>navigator<span class="punctuation token">.</span>id<span class="punctuation token">.</span><span class="function token">watch<span class="punctuation token">(</span></span> <span class="punctuation token">{</span> + loggedInUser<span class="punctuation token">:</span> currentUser<span class="punctuation token">,</span> + onlogin<span class="punctuation token">:</span> verifyAssertion<span class="punctuation token">,</span> + onlogout<span class="punctuation token">:</span> signoutUser <span class="punctuation token">}</span> <span class="punctuation token">)</span><span class="punctuation token">;</span></code></pre> + +<p> </p> + +<p>すべてのページ上のログインボタンまたはログアウトボタンで<code>navigator.id.watch()を</code> <strong>呼び出さなければなりません</strong>。サイトのユーザのための、自動ログインやグローバルログアウトのような Persona の機能をサポートするには、この関数をあなたのサイトのすべてのページ上で <strong>呼び出してください</strong>。</p> + +<h2 id="Step_4.3A_Verify_the_user.E2.80.99s_credentials" name="Step_4.3A_Verify_the_user.E2.80.99s_credentials">ステップ 4: ユーザの信用情報を検証する</h2> + +<p>Persona は、パスワードの代わりに「ID アサーション」を使います。これは、ユーザのメールアドレスに結び付けられた、一つのサイトで一回だけ使えるパスワードのようなものです。ユーザがログインしようとする時、このユーザからのアサーションと共に <code>onlogin</code> コールバックが呼びされます。彼らをログインさせる前に、アサーションが正しいか検証しなければなりません。</p> + +<p>アサーションを、ユーザのブラウザ上で実行している JavaScript ではなく、あなたのサーバ上で検証することは <em>とても重要</em> です。ユーザのブラウザ上では簡単に偽造できてしまうからです。上記の例では、jQuery の <code>$.ajax()</code> ヘルパーを使ってアサーションをサイトのバックエンドに手放し、<code>/auth/login</code> に <code>POST</code> しました。</p> + +<p>あなたのサーバにアサーションが渡ったら、それをどのように検証したらよいでしょうか? 最も簡単な方法は、Mozilla が提供するヘルパーサービスを使うことです。単純にアサーションを 2 個の引数と共に <code>https://verifier.login.persona.org/verify</code> に <code>POST</code> するだけです:</p> + +<ol> + <li><code>assertion</code>: ユーザにより提供された ID アサーション。</li> + <li><code>audience</code>: あなたの Web サイトのホスト名とポート番号。この値はバックエンドに直接記述してください。ユーザから与えられたいかなるデータも、この引数に渡してはいけません。</li> +</ol> + +<p>例えば、<code>example.com</code> というサイトの場合、コマンドラインで次のようにアサーションをテストできます:</p> + +<pre class="brush: bash;">$ curl -d "assertion=<ASSERTION>&audience=https://example.com:443" "https://verifier.login.persona.org/verify" +</pre> + +<p>値が正しければ、次のような JSON レスポンスが返ります:</p> + +<pre class="brush: js;">{ + "status": "okay", + "email": "bob@eyedee.me", + "audience": "https://example.com:443", + "expires": 1308859352261, + "issuer": "eyedee.me" +} +</pre> + +<p>検証サービスについては、<a href="/ja/docs/Persona/Remote_Verification_API">Verification Service API</a> をお読みください。<code>/auth/login</code> の実装例と <a href="http://python.org/">Python</a> を使った <a href="http://flask.pocoo.org/">Flask</a> Web フレームワーク、<a href="http://python-requests.org">Requests</a> HTTP ライブラリは次のようになります:</p> + +<pre class="brush: python;">@app.route('auth/login/', methods=['POST']) +def login(): + # The request has to have an assertion for us to verify + if 'assertion' not in request.form: + abort(400) + + # Send the assertion to Mozilla's verifier service. + data = {'assertion': request.form['assertion'], 'audience': 'https://example.com:443'} + resp = requests.post('https://verifier.login.persona.org/verify', data=data) + + # Did the verifier respond? + if resp.ok: + # Parse the response + verification_data = json.loads(resp.content) + + # Check if the assertion was valid + if verification_data['status'] == 'okay': + # Log the user in by setting a secure session cookie + session.update({'email': verification_data['email']}) + return resp.content + + # Oops, something failed. Abort. + abort(500) +</pre> + +<p>他の言語でPersonaを使う例は<a href="https://github.com/mozilla/browserid-cookbook" title="https://github.com/mozilla/browserid-cookbook">cookbook</a>.を参照してください。</p> + +<p>セッション管理は、既存のログインシステムとよく似ているでしょう。最初の大きな変更は、パスワードを確認する代わりにアサーションを確認してユーザの ID を検証することです。他の大きな変更は、ユーザのメールアドレスが利用可能であることを、{{domxref("navigator.id.watch()")}} に <code>loggedInUser</code> 引数を渡して確認することです。</p> + +<p>ログアウトは簡単です: 必要なことは、ユーザのセッション Cookie を削除するだけです。</p> + +<h2 id="Step_5.3A_Review_best_practices" name="Step_5.3A_Review_best_practices">ステップ 5: ベストプラクティスを見直す</h2> + +<p>すべての動作が確認でき、あなたのサイトへのログインとログアウトが成功したら、Persona を安全に安心して使うための <a href="/ja/docs/Persona/Security_Considerations">ベストプラクティス</a> を見直してください。</p> + +<p>製品レベルのサイトを制作している場合は、Persona を使ったユーザのログインとログアウトをシミュレートするインテグレーションテストを書きたいでしょう。これを Selenium で容易に行うために、<a href="https://github.com/mozilla/bidpom">bidpom</a> ライブラリの使用を考慮してください。<a href="https://mockmyid.com/">mockmyid.com</a> と <a href="http://personatestuser.org">personatestuser.org</a> のサイトも役立つでしょう。</p> + +<p>最後に、セキュリティの問題や Persona API の後方互換性に関わる変更を知るために、<a href="https://mail.mozilla.org/listinfo/persona-notices">Persona notices</a> メーリングリストにサインアップすることを忘れないでください。このメーリングリストのやりとりはとても少ないですが、あなたのサイトに悪影響を及ぼす可能性のある変更をアナウンスするために使われます。</p> + +<p> </p> + +<p> </p> diff --git a/files/ja/mozilla/persona/remote_verification_api/index.html b/files/ja/mozilla/persona/remote_verification_api/index.html new file mode 100644 index 0000000000..f6c5fe4912 --- /dev/null +++ b/files/ja/mozilla/persona/remote_verification_api/index.html @@ -0,0 +1,125 @@ +--- +title: Remote Verification API +slug: Mozilla/Persona/Remote_Verification_API +tags: + - BrowserID + - Persona +translation_of: Archive/Mozilla/Persona/Remote_Verification_API +--- +<h3 id="Summary" name="Summary">要約</h3> +<p>ユーザが Web サイトにログインしようとする時、ブラウザが <em>アサーション</em> と呼ばれるデータ構造を生成します。このデータの内容は、暗号化された署名付きのメールアドレスです。ブラウザは、このアサーションを Web サイトに送信し、ユーザにログインを許可する前にアサーションが正当か検証されます。</p> +<p>アサーションはローカルで検証することもできます。または、<span class="link-https"><code>https://verifier.login.persona.org/verify</code></span> でホストされた API でも検証できます。このページでは、この API の使い方を説明します。</p> +<h3 id="Methods" name="Methods">メソッド</h3> +<p><code>https://verifier.login.persona.org/verify</code> に HTTP POST リクエストを送信します。</p> +<h3 id="引数">引数</h3> +<p><code>assertion</code>: ユーザが提供したアサーション。{{ domxref("navigator.id.watch()") }} の <code>onlogin</code> 関数に渡す最初の引数として使います。<br> + <code>audience</code>: あなたのサイトのプロトコル、ドメイン名、ポート番号。例えば、"<code>https://example.com:443</code>" と指定します。</p> +<h3 id="戻り値">戻り値</h3> +<p>この API を呼び出すと、<code>status</code> 要素を含む JSON データ構造を返します。この要素は、"okay" と "failure" のどちらかになります。<code>status</code> の値に依存して、JSON データに以下の追加の要素が含まれることがあります。</p> +<h4 id="okay">"okay"</h4> +<p>アサーションは正当です。</p> +<p>この場合、JSON データ構造に次の追加要素が含まれます:</p> +<table style="width: 80%;"> + <tbody> + <tr> + <td><code>"email"</code></td> + <td>アサーションに含まれるメールアドレス。これは、ログインしようとしているユーザのものです。</td> + </tr> + <tr> + <td><code>"audience"</code></td> + <td>アサーションに含まれる audience 値。あなたの Web サイトの URL であることが期待されます。</td> + </tr> + <tr> + <td>"<code>expires"</code></td> + <td>アサーションの有効期限日。<a href="docs/JavaScript/Reference/Global_Objects/Date/valueOf" title="docs/JavaScript/Reference/Global_Objects/Date/valueOf">Date オブジェクトの初期値</a> を表します。これは、1970 年 1 月 1 日の午前 0 時 (UTC) から経過したミリ秒単位の値です。</td> + </tr> + <tr> + <td><code>"issuer"</code></td> + <td>アサーションを発行した ID プロバイダのホスト名。</td> + </tr> + </tbody> +</table> +<h4 id="failure">"failure"</h4> +<p>アサーションは不正です。この場合、JSON データ構造に 1 個の追加要素が含まれます:</p> +<table> + <tbody> + <tr> + <td><code>"reason"</code></td> + <td>検証が失敗した理由を説明する文字列。</td> + </tr> + </tbody> +</table> +<h3 id="コード例">コード例</h3> +<h4 id="node.js">node.js</h4> +<p>このコード例は、express.js を使用する node.js サーバを使用します。</p> +<pre class="brush: js" style="margin-left: 120px;">var express = require("express"), + app = express.createServer(), + https = require("https"), + querystring = require("querystring"); +/* ... */ + +// audience は、ブラウザのアドレスバーに表示されている URL と一致しなければなりません。 +// プロトコルとホスト名、ポート番号を含みます。 +var audience = "http://localhost:8888"; + +app.post("/authenticate", function(req, res) { + var vreq = https.request({ + host: "verifier.login.persona.org", + path: "/verify", + method: "POST" + }, function(vres) { + var body = ""; + vres.on('data', function(chunk) { body+=chunk; } ) + .on('end', function() { + try { + var verifierResp = JSON.parse(body); + var valid = verifierResp && verifierResp.status === "okay"; + var email = valid ? verifierResp.email : null; + req.session.email = email; + if (valid) { + console.log("assertion verified successfully for email:", email); + res.json(email); + } else { + console.log("failed to verify assertion:", verifierResp.reason); + res.send(verifierResp.reason, 401); + } + } catch(e) { + console.log("non-JSON response from verifier"); + // 検証側から偽の応答がありました! + res.send("bogus response from verifier!", 401); + + } + }); + }); + vreq.setHeader('Content-Type', 'application/x-www-form-urlencoded'); + + var data = querystring.stringify({ + assertion: req.body.assertion, + audience: audience + }); + vreq.setHeader('Content-Length', data.length); + vreq.write(data); + vreq.end(); + console.log("verifying assertion!"); +}); + +</pre> +<p>via <a class="link-https" href="https://github.com/lloyd/myfavoritebeer.org/blob/06255b960e1f9078bc935c1c7af0662f33c88818/server/main.js#L112" title="https://github.com/lloyd/myfavoritebeer.org/blob/06255b960e1f9078bc935c1c7af0662f33c88818/server/main.js#L112">Lloyd Hilaiel</a></p> +<h4 id="PHP">PHP</h4> +<pre class="brush: php">$url = 'https://verifier.login.persona.org/verify'; +$assert = $_POST['assert']; +$params = 'assertion='.$assert.'&audience=' . + urlencode('http://example.com:80'); +$ch = curl_init(); +$options = array( + CURLOPT_URL => $url, + CURLOPT_RETURNTRANSFER => TRUE, + CURLOPT_POST => 2, + CURLOPT_POSTFIELDS => $params +); +curl_setopt_array($ch, $options); +$result = curl_exec($ch); +curl_close($ch); +echo $result; +</pre> +<p>Via <a class="link-https" href="https://github.com/codepo8/BrowserID-login-with-PHP/blob/184fdb74c8a554461c262875859968154d09288e/verify.php">Christian Heilmann</a></p> diff --git a/files/ja/mozilla/persona/security_considerations/index.html b/files/ja/mozilla/persona/security_considerations/index.html new file mode 100644 index 0000000000..640783acb6 --- /dev/null +++ b/files/ja/mozilla/persona/security_considerations/index.html @@ -0,0 +1,91 @@ +--- +title: セキュリティについて考慮すべき事柄 +slug: Mozilla/Persona/Security_Considerations +tags: + - Persona + - Security +translation_of: Archive/Mozilla/Persona/Security_Considerations +--- +<p>あなたの Web サイトに Persona のサポートを追加する場合、Persona ができるだけセキュリティの重荷を負います。しかしながら、セキュリティのある面においては、あなたの Web サイトでしか対処できないことがあります。以下は、そのリストです。</p> + + + +<h2 id="Essential_practices" name="Essential_practices">ベストプラクティス</h2> + + + +<h3 id="Verify_assertions_on_your_server" name="Verify_assertions_on_your_server">あなたのサーバ上でアサーションを検証する</h3> + + +<p>Persona を使う時は、ID アサーションが {{domxref("navigator.id.watch()")}} の <code>onlogin</code> 関数に渡されます。アサーションは、<em>常に</em> あなたの検証サーバに渡してください。その検証結果を基に、あなたのサーバがユーザに追加の許可を与えるかどうかを決定してください:</p> +<pre class="brush:js;">// navigator.id.watch({ ... 内 +onlogin: function(assertion) { + // ユーザがログインしようとしています! ここで必要なことは: + // 1. アサーションを検証のためにバックエンドに送信し、セッションを作成する。 + // 2. UI を更新する。 +}, +</pre> +<p>ユーザのブラウザで実行される JavaScript を使用してアサーションを検証しようとすると、悪意のあるユーザがローカルのインジェクションコードであなたのサイトのユーザに偽装し、JavaScript コードを覆すことができてしまいます。これは、コードが実行されるユーザのブラウザをあなたが完全に制御できないため、可能となります。</p> +<p>繰り返しますが、アサーションは、<em>常に</em> あなたの検証サーバに渡してください。リモート検証 API を使用する場合でも同じです。</p> + + + +<h3 id="Explicitly_specify_the_audience_parameter" name="Explicitly_specify_the_audience_parameter"><code>audience</code> 引数を明記する</h3> + + + +<p>アサーションを検証するには、POST リクエストを <code>https://verifier.login.persona.org/verify</code> に送信します。このリクエストには <code>audience</code> と呼ばれる引数が含まれます:</p> +<pre><code>assertion=<ASSERTION>&audience=https://mysite.com:443"</code> +</pre> +<p><code>audience</code> 引数は必須です。常に、あなたのコード内かコードの設定内に audience を明記してください。特に次のことに注意してください:</p> +<ul> + <li>ユーザのブラウザが送信した Host ヘッダを信頼してはいけません。</li> + <li>ユーザのブラウザが送信した明示的な引数を信頼してはいけません。ただし、<code>document.location</code> など、あなたの JavaScript で生成されたものを除きます。</li> +</ul> +<p>ユーザのブラウザから伝えられた audience を信頼してしまうと、悪意のある Web サイトが <em>自身の</em> Web サイトのアサーションを再利用して <em>あなたの</em> Web サイトにログインすることが可能になります。</p> + + + +<h3 id="Verify_SSL_certificates" name="Verify_SSL_certificates">SSL 証明書を検証する</h3> +<p>アサーションを検証するには、POST リクエストを <code>https://verifier.login.persona.org/verify</code> に送信します。この HTTPS リクエストで、サーバから送られた証明書を信頼されたルート証明書に照らし合わせて確実に検証しなければなりません。これをしない場合、攻撃者が <code>verifier.login.persona.org</code> になりすまして偽の検証結果を返すことができます。</p> +<p>使用しているライブラリが証明書の検証リクエストを正しく行い、適切なルート証明書でそれを初期化しているか確認してください。</p> +<p>例えば、Python 2.7 の標準の <a href="http://docs.python.org/release/2.7.3/library/urllib2.html#urllib2.urlopen" title="http://docs.python.org/release/2.7.3/library/urllib2.html#urllib2.urlopen">urllib2 モジュール</a> は、サーバ証明書を検証しません。代わりに、Python 2.x の "<a href="http://pypi.python.org/pypi/requests">requests</a>" モジュールや "<a href="http://pypi.python.org/pypi/urllib3" title="http://pypi.python.org/pypi/urllib3">urllib3</a>" モジュール、または Python 3.x の標準の <code>http.client.HTTPSConnection</code> クラスの使用を推奨します。Perl の場合は、<code>libwww-perl</code> のバージョン 6.0 以降を使用してください。使用している言語やライブラリ、オペレーティングシステムによりますが、信頼された CA ルートと <code>verifier.login.persona.org</code> で使用されている単独の CA のどちらかのリストを提供する必要があるかもしれません。</p> + + + + +<h3 id="Implement_CSRF_protection" name="Implement_CSRF_protection">CSRF プロテクションを実装する</h3> + + +<p>CSRF (Cross-Site Request Forgery) ログイン攻撃では、攻撃者がクロスサイトリクエストフォージェリを利用して、ユーザを攻撃者の資格情報を使った Web サイトにログインさせます。</p> +<p>例えば: ユーザが <code>form</code> 要素を含む悪意のある Web サイトを訪れたとします。この form の <code>action</code> 属性には、攻撃者のユーザ名とパスワードを含む <a href="http://www.google.com/login" title="http://www.google.com/login">http://www.google.com/login</a> への HTTP POST リクエストがセットされています。ユーザが form を送信すると、リクエストが Google に送信され、Google サーバがユーザのブラウザに Cookie をセットします。これで、ユーザが知らないうちに、攻撃者の Google アカウントへのログインが成功してしまいます。</p> +<p>この攻撃は、ユーザの個人情報を集めるために使われます。例えば、Google の <a class="link-https" href="https://www.google.com/history/">Web History</a> 機能は、ユーザによるすべての Google 検索の検索語を記録します。ユーザが攻撃者の Google アカウントにログインし、攻撃者が Web History 機能を有効にすると、ユーザはこれらすべての情報を攻撃者に与えることになります。</p> +<p>CSRF ログイン攻撃とその防御手段は、<a href="http://www.adambarth.com/papers/2008/barth-jackson-mitchell-b.pdf">Robust Defenses for Cross-Site Request Forgery</a> (PDF) に詳しく解説されています。これらは Persona に限ったことではありません。ほとんどのログイン機構は、このような攻撃への潜在的な脆弱性を持っています。</p> +<p>CSRF ログイン攻撃からサイトを護るために使える手段には、様々なテクニックがあります。上記のドキュメントを参照してください。</p> +<p>取り得るアプローチ方法の一つは、サーバ内に秘密の ID を作成してブラウザと共有し、ログインリクエストを行う時にそれをブラウザから提供してもらうことです。例えば:</p> +<ol> + <li>ユーザがサイトを訪れたらすぐに (ログインする前に) ユーザのセッションをサーバ上に作成し、セッション ID をブラウザの Cookie に格納します。</li> + <li>サーバ上で 10 文字以上のランダムな英数字の文字列を生成します。UUID をランダムに生成するとよいでしょう。これは CSRF トークンです。このトークンをセッションに格納します。</li> + <li>CSRF トークンを JavaScript や HTML 内の隠し form 変数に埋め込むことによってブラウザに渡します。</li> + <li>AJAX サブミッションや form の POST に CSRF トークンに含めてください。</li> + <li>サーバ側では、アサーションを受け取る前に、送信された CSRF トークンがセッションに格納された CSRF トークンと一致するか確認します。</li> +</ol> + + + + +<h2 id="Enhancements" name="Enhancements">さらなる向上</h2> + + + + +<h3 id="Content_Security_Policy_(CSP)" name="Content_Security_Policy_(CSP)">コンテントセキュリティポリシー (CSP)</h3> +<p><a href="/docs/Security/CSP" title="/docs/Security/CSP">コンテントセキュリティポリシー</a> (CSP) は、クロスサイトスクリプティング (XSS) やデータインジェクション攻撃を含む、特定の攻撃の検出と軽減を助けるセキュリティの追加レイヤーです。これらの攻撃は、データの盗難からサイトの破壊、マルウェアの拡散まで、すべての攻撃に使われます。</p> +<p>あなたのサイトで CSP を使う場合は、サイトポリシーで Persona を有効にする必要があるでしょう。あなたのポリシーに依存しますが、次のことが必要です:</p> +<ul> + <li>インラインの <code>javascript:</code> URI を削除し、追加のスクリプトファイルから読み込んだコードに置き換えてください。このスクリプトファイルでは、対象の要素をその ID を基に見つけ、{{domxref("element.onclick", "onclick")}} を設定するか、{{domxref("element.addEventListener()", "addEventListener()")}} を呼び出すことにより、要素にスクリプトを結び付けます。</li> + <li><code>https://login.persona.org</code> に <code>script-src</code> と <code>frame-src</code> の両方を許可し、あなたのサイトがリモートの <code>include.js</code> ファイルを読み込んでフォールバックの Persona 実装と通信できるようにしてください。</li> +</ul> +<p>Apache コンフィギュレーションには、次の行を含めることになるでしょう:</p> + +<pre>Header set X-Content-Security-Policy: "default-src 'self'; frame-src 'self' https://login.persona.org ; script-src 'self' https://login.persona.org"</pre> diff --git a/files/ja/mozilla/persona/why_persona/index.html b/files/ja/mozilla/persona/why_persona/index.html new file mode 100644 index 0000000000..7321201f6c --- /dev/null +++ b/files/ja/mozilla/persona/why_persona/index.html @@ -0,0 +1,48 @@ +--- +title: なぜ Persona? +slug: Mozilla/Persona/Why_Persona +tags: + - Persona +translation_of: Archive/Mozilla/Persona/Why_Persona +--- +<p>ユーザ名とパスワードを使う流行のシステムは長続きしないでしょう: ユーザが利用するすべてのサイトとサービスでは、ユーザが新しく複雑なパスワードを作成して記憶しておくことが求められ、すべてのサイトはパスワードを安全に保持することが求められます。しかしながら、最近のセキュリティ侵害は、優れた企業でさえもユーザの情報を危険にさらし、パスワードの保護に躓くことを証明しています。</p> + +<p>Persona は、オープンで分散型の、サイトごとのパスワード認証を置き換える Web スケールの認証システムです。Persona は、Facebook Connect のような中央集権型のシステムに頼らずに、ユーザビリティとプライバシーに関係する OpenID のようなシステムの短所の克服に取り組みました。</p> + +<h2 id="Persona_Gets_Rid_of_Per-Site_Passwords" name="Persona_Gets_Rid_of_Per-Site_Passwords">Persona はサイトごとのパスワード認証を廃止します</h2> + +<p>Persona を利用すると、サイトごとに異なるパスワードを入力する代わりに、各サイトの認証を単純な一回だけのプロセスを完了した後に 2 回クリックするだけでサイトにログインできます。これは、安全に保護された公開鍵による暗号化の上に構築されています。パスワードを入力する代わりに、ユーザのブラウザが暗号化された「ID アサーション」を生成します。これは、数分後に期限切れになり、一つのサイトでのみ検証されます。サイト固有のパスワードが無いため、Web サイトは、パスワードを安全に保持することやパスワードのデータベースが失われる可能性を気にせずに Persona を使えます。</p> + +<p>このクイックサインインのプロセスは、ユーザが新しいサイトを訪れた時の不和も軽減します。</p> + +<h2 id="Persona_Identities_are_Email_Addresses" name="Persona_Identities_are_Email_Addresses">Persona の ID はメールアドレス</h2> + +<p>Persona は、ユーザが決めるユーザ名ではなく、ユーザのメールアドレスを認証に使用します。これには、ユーザと開発者の両方に利点があります:</p> + +<h3 id="User_Benefits_of_Using_Email_Addresses" name="User_Benefits_of_Using_Email_Addresses">メールアドレスを使うことのユーザの利点</h3> + +<ul> + <li>ユーザはすでに自分のメールアドレスを知っており、OpenID で混乱する可能性のある新しい URL を憶える必要はありません。</li> + <li>メールアドレスは、<code>someone@some-context</code> の概念を適切にとらえており、ユーザによる <code>@work</code> や <code>@home</code>、<code>@school</code> などの ID の区別を簡単にします。これは、Facebook や Google+ のようなソーシャルネットワーク上の実名やシングルアカウントのポリシーを通じた ID を統合する傾向とは異なります。</li> + <li>メールアドレスは、自身でホストすることも、ユーザの ID のコントロールを他のプロバイダに委ねて代理を頼むこともできます。</li> +</ul> + +<h3 id="Developer_Benefits_of_Using_Email_Addresses" name="Developer_Benefits_of_Using_Email_Addresses">メールアドレスを使うことの開発者の利点</h3> + +<ul> + <li>メールアドレスは、ユーザと直接連絡をとる手段を開発者に与えます。</li> + <li>ほとんどのサイトはユーザのメールアドレスの入手を望んでいます。Persona は、ユーザがログインした時に、サイトにユーザのメールアドレスを提供し、サインアップフォームの後に追加の情報を入力する必要をなくします。</li> + <li>多くのログインシステムは、すでにメールアドレスをユニークキーとして扱っています。これは、Persona によるロックインではなく、同時に既存のログインシステムを配備できることを意味しています。</li> +</ul> + +<p>言うまでもなく、メールアドレスは、既に数え切れないほど多くのプロバイダにわたって数十億のアカウントに完全に分散化したシステムです。</p> + +<h2 id="How_is_Persona_different_from_other_Single_Sign-On_providers.3F" name="How_is_Persona_different_from_other_Single_Sign-On_providers.3F">Persona は他のシングルサインオンのプロバイダとどう違いますか?</h2> + +<p>Persona は、安全で安心、簡単です。Persona は、他のプロバイダがしない、またはできない方法でユーザのプライバシーとコントロール、選択肢を護ります:</p> + +<p>Facebook や Google+ のような多くのソーシャルネットワークでは、ユーザに実名を使うことが要求され、一つのアカウントに制限されています。Persona は、メールアドレスの上に構築されることにより、ユーザが職場や家庭、学校、他の場所での ID を分けておくことができます。</p> + +<p>Persona はオープンで分散型です: メールアドレスを持つ人は誰でも Persona を使ってサイトにサインインできます。おまけに、誰でも独自の ID プロバイダをホストしたりメールアドレスのように他の機関に代理を頼んだりできます。これは、単一のアカウントを必要とし、中央集権化されたソーシャルなログインサービスとは対照的です。</p> + +<p>Persona は、ユーザのブラウザを認証プロセスの中に置くことによる新しいアプローチでユーザのプライバシーを護ります: ブラウザはユーザのメールプロバイダから信用情報を取得し、その信用情報を Web サイトに提供します。メールプロバイダはユーザを追跡できませんが、Web サイトは、信用情報を暗号化された状態で検証することにより、ユーザの ID を信用することができます。多くの他のシステムでは、OpenID のような分散型でさえも、ユーザにログインを許可する前に、サイトとの「確認手続き」(phone home) を必要とします。</p> |