2017-08-23 12 views
5

私たちはGoogleホームのためのgoogleのアクションを使用してスマートホームアプリを構築しています。 Googleのアプリでは、ユーザーのデバイスにアクセスできるようにGoogleシステムにログインする必要があります。ユーザーのデバイスにアクセスできるようにして、Googleホームの音声を使用してユーザーのデバイスを制御できます。私たちのユーザーバックエンドは、AWS Cognitoを使用して構築されています。 Googleでは、Googleホームアプリの一環としてAPI.AIを使用しています。Googleホームアプリ、正常に動作するOAUTHを取得できない

Google認定OAUTH2エンドポイントとgoogleアプリのアクションを設定して、認証コードフローとさまざまなスコープを使用して機能しますが、欠落しているものがあります。ユーザーアカウントをGoogleホームアプリにリンクしようとすると、ログインページにリダイレクトされます。ユーザーの詳細を記入した後、私はGoogle Homeの「Discover」タブに戻ってきましたが、「Auth Code ExchangeのIdPからの応答が悪い」というメッセージが下部に表示されます。

GoogleのOAUTH2プレイグラウンドを使って試してみました。私が私たちのOATUHサーバーからコードを取得することができる午前ことを使用しているとき、私は次のエラーを取得するトークンのコードを交換しようとしたときようだ:

HTTP/1.1 400 Bad Request 
Strict-transport-security: max-age=31536000 ; includeSubDomains 
X-content-type-options: nosniff 
X-application-context: application:prod:8443 
Transfer-encoding: chunked 
Set-cookie: XSRF-TOKEN=35f58337-76f4-4993-a0c9-93429134ea42; Path=/; Secure; HttpOnly 
Expires: 0 
Server: Server 
Connection: keep-alive 
X-amz-request-id: 284d862e-b021-4079-b5f5-3cbce675983c 
X-xss-protection: 1; mode=block 
Pragma: no-cache 
Cache-control: no-cache, no-store, max-age=0, must-revalidate 
Date: Wed, 23 Aug 2017 13:51:42 GMT 
X-frame-options: DENY 
Content-type: application/json;charset=UTF-8 
{ 
    "error": "invalid_client" 
} 

私がチェックし、クライアントのIDを再チェックしており、クライアントの秘密など、エラーを見つけることはできません。

どのように私はこの問題を解決するかもしれないか考えている人はいますか?

+0

OAuth2 Playground経由ですべて正常に動作しますが、私はAUTHトークンを取得し、これをACCESSトークンに交換してから、アプリケーションにリクエストを送信しても問題ありません。私はシミュレータを介してそれを使用しようとすると、私はフローを再実行する機会を持つ空白のページにリダイレクトを取得しようとしました。私は私のアプリを試してみると、それはちょうど正しく認証されません – Gazeth

+0

@Gazeth ' 「あなたのGoogle Homeアプリをあなたの携帯電話のGoogle Homeアプリ内か、実際にあなたの電話アプリ内にあるのですか? – HumanTarget

+0

私はGoogle Homeアプリで試してみたいと思います。「Talk to CMAP」と入力すると、私がクリックしたアカウントをリンクするには、ログインの詳細を記入してください。しかし、認証は決して適切に行われません。 – Gazeth

答えて

0

OK事前に

おかげで、あなたはcognito AWSを使用する場合、私は、クライアントがいた場合はこのdoc(http://docs.aws.amazon.com/cognito/latest/developerguide/token-endpoint.html

認証 によると... ..... を理由を知っているかもしれ秘密を発行した場合、クライアントは、基本HTTP許可を介して、そのclient_idとclient_secretを認証ヘッダーに渡す必要があります。シークレットはBasic BaseEncode(client_id:client_secret)です。

彼らは...ヘッダーで

を入れて、クライアントとクライアントsectetが必要その後、私は使用してAWS HTTPプロキシは、Googleの進捗状況の要求をキャッチ。

Method request headers: {X-Cloud-Trace-Context=d7b6b9b8239965baf69acab659e80a01/13879251242019662389, CloudFront-Viewer-Country=US, CloudFront-Forwarded-Proto=https, CloudFront-Is-Tablet-Viewer=false, CloudFront-Is-Mobile-Viewer=false, User-Agent=google-oauth-playground AppEngine-Google; (+http://code.google.com/appengine; appid: s~oauth2playground), X-Forwarded-Proto=https, CloudFront-Is-SmartTV-Viewer=false, Host=en75z5h2rb.execute-api.us-east-1.amazonaws.com, Accept-Encoding=gzip, deflate, X-Forwarded-Port=443, X-Amzn-Trace-Id=Root=1-5a0fcef2-09197cd86a625ad47d78f0b7, Via=1.1 d63a8908759a2f4775b3f672ebf823cc.cloudfront.net (CloudFront), X-Amz-Cf-Id=nFdLK97vAS5HvmpNYkPpbUMOB4bCaM6pScHWTAReAnonLg1gXF7hSg==, X-Forwarded-For=107.178.195.199, 54.182.238.53, content-type=application/x-www-form-urlencoded, CloudFront-Is-Desktop-Viewer=true} 

がリクエストヘッダには認証はありません。.. のでCognitoはバック戻ります

"エラー": "invalid_client"

そして、このOAUTH2.0仕様に従ってを... https://tools.ietf.org/html/rfc6749#section-2.3.1

私は既にawsのサポートを求めています。彼らは言った。

* AWSサポートにお問い合わせいただきありがとうございます。詳細なご意見をお寄せいただきありがとうございます。リクエスト本体にCognitoがサポートするクライアントの資格情報に関するご質問をお待ちしております。

OAUTH2.0規格のRFC 6749 [0]を読んだ後、request-bodyにクライアントの資格情報を含めるのはお勧めできません。

"2つのパラメータを使用してrequest-bodyにクライアントの資格情報を含めることは推奨されず、HTTP基本認証方式(またはその他のパスワードベースのHTTPを直接利用できないクライアントに限定する必要があります認証スキーム)。"*

関連する問題