次のような状況があります。
私は現在、ユーザーが自分の Google アカウントでサインインできる機能を備えた Metro スタイルのアプリケーションを作成しようとしています。アプリは、Userinfo.profile および Userinfo.email などのいくつかのアクセス許可を要求します。
このために、私は現在OAuthv2を使用しており、詳細をリクエストするとうまくいきました(かなりの努力と調査の後)。
使用した URL :
const string url = "https://accounts.google.com/o/oauth2/auth?" +
"client_id=" + clientId +
"&redirect_uri=" + "urn:ietf:wg:oauth:2.0:oob" +
"&response_type=code" +
"&scope=https://www.googleapis.com/auth/userinfo.profile+https://www.googleapis.com/auth/userinfo.email" +
"&access_type=offline";
問題は、ユーザーの認証を維持したい場合は、ユーザーがクライアント側でトークンを保存するか、Googleを使用してログインする方法を見つけてセッションを維持し、彼は認証されています。
問題は、後者の実行方法がわからず、使用方法がわからないことです。現時点では、アプリケーションを開くたびに、ユーザーは Google 認証ページにリダイレクトされ、再起動するたびに手順全体が何度も繰り返されます。
私が達成したいのは、ユーザーがログインした場合、そのユーザーを特定する何らかの方法があり、特定の詳細のアクセス許可を再要求することで常に負担をかけないようにすることです。
OpenIDを調べましたが、常に取得します
<?xml version="1.0" encoding="UTF-8"?>
<xrds:XRDS xmlns:xrds="xri://$xrds" xmlns="xri://$xrd*($v*2.0)">
<XRD>
<Service priority="0">
<Type>http://specs.openid.net/auth/2.0/server</Type>
<Type>http://openid.net/srv/ax/1.0</Type>
<Type>http://specs.openid.net/extensions/ui/1.0/mode/popup</Type>
<Type>http://specs.openid.net/extensions/ui/1.0/icon</Type>
<Type>http://specs.openid.net/extensions/pape/1.0</Type>
<URI>https://www.google.com/accounts/o8/ud</URI>
</Service>
</XRD>
</xrds:XRDS>
この URL の応答として:
https://www.google.com/accounts/o8/id?openid.mode=checkid_setup&openid.ns=http://specs.openid.net/auth/2.0&openid.return_to=urn:ietf:wg:oauth:2.0:oob&openid.ns.ui=http://specs.openid.net/extensions/ui/1.0&openid.ns.ax=http://openid.net/srv/ax/1.0&openid.ax.mode=fetch_request&openid.ax.required=email,firstname,language,lastname,country&openid.ns.ext=http://specs.openid.net/extensions/oauth/1.0&openid.ext2.consumer=https://www.google.com/accounts/o8/ud?openid.mode=checkid_setup&openid.ns=http://specs.openid.net/auth/2.0&openid.return_to=urn:ietf:wg:oauth:2.0:oob&openid.ext2.scope=https://www.googleapis.com/auth/userinfo.profile+https://www.googleapis.com/auth/userinfo.email
私はそれを間違って構築していますか?
これを「正しく」実行する方法について何か提案があれば、私が達成しようとしていること(Googleとの統合、ユーザーがGoogleメールを使用してログインできるようにし、アプリケーションを承認していない場合にのみ、彼に依頼してくださいそうすること、および 2 回目以降にログインするときに彼が誰であるかを見つける方法を見つけること)、またはどのようにそれを行うことができるかについては、お気軽に.
さらに、.Net 4.5 フレームワークの簡素化されたバージョンを使用すると、完全な 4.5 に依存しているため、OpenID ライブラリを使用できないようです。
*編集* MSDNを見ると、次のようになります。
To support SSO, the online provider must allow you to register a redirect URI in the form ms-app://appSID, where appSID is the SID for your app.
これは単に不可能だということですか?Googleでは、ドメインのキーのみをリクエストできるため、http(s)://
?