がありますが、サーバー側でIDトークンの整合性を検証することが可能な異なるwaysのカップル:
- 「手動」 - 常に、Googleの公開鍵をダウンロードし、署名を検証した後、一人ひとりフィールドは、
iss
を含みます。主な利点(私の意見では小さなものですが)は、Googleに送信されるリクエストの数を最小限に抑えることができるということを見ています。
- は「自動的に」 - official oneのように - GoogleのAPIクライアントライブラリを使用して、このトークン
https://www.googleapis.com/oauth2/v3/tokeninfo?id_token={0}
- を確認するために、GoogleのエンドポイントでGETを実行します。ここで
が、これがどのように見えるかです:
private const string GoogleApiTokenInfoUrl = "https://www.googleapis.com/oauth2/v3/tokeninfo?id_token={0}";
public ProviderUserDetails GetUserDetails(string providerToken)
{
var httpClient = new MonitoredHttpClient();
var requestUri = new Uri(string.Format(GoogleApiTokenInfoUrl, providerToken));
HttpResponseMessage httpResponseMessage;
try
{
httpResponseMessage = httpClient.GetAsync(requestUri).Result;
}
catch (Exception ex)
{
return null;
}
if (httpResponseMessage.StatusCode != HttpStatusCode.OK)
{
return null;
}
var response = httpResponseMessage.Content.ReadAsStringAsync().Result;
var googleApiTokenInfo = JsonConvert.DeserializeObject<GoogleApiTokenInfo>(response);
if (!SupportedClientsIds.Contains(googleApiTokenInfo.aud))
{
Log.WarnFormat("Google API Token Info aud field ({0}) not containing the required client id", googleApiTokenInfo.aud);
return null;
}
return new ProviderUserDetails
{
Email = googleApiTokenInfo.email,
FirstName = googleApiTokenInfo.given_name,
LastName = googleApiTokenInfo.family_name,
Locale = googleApiTokenInfo.locale,
Name = googleApiTokenInfo.name,
ProviderUserId = googleApiTokenInfo.sub
};
}
あなたは何あなたはおそらくそれを無視しないべきではない、ユーザーが有効なアカウント/メールアドレスを持っていることを検証している場合。このログインはどのように達成していますか?私はそれを試していないが、email_verifiedがプロファイルスコープの一部として返され、問題のユーザーがGoogle+アカウントを持っていない場合、返信されるのか疑問に思う。 – DaImTo
メールがユーザーによって確認された場合、その申し立てで真実を返す必要があります。私たちはこれを調べる必要があります。可能であれば、私のG +プロフィールを通じてユーザーのメールアドレスを私に送信できますか? – nvnagr
@nvnagr私はG + – Rob