質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

2973閲覧

WebPush通知 VAPID認証方式について

zcraft

総合スコア17

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

2クリップ

投稿2017/10/24 10:30

編集2017/10/26 00:55

###前提・実現したいこと

VAPID認証方式のJWTについて質問です。
header.payloadのあとにドットで連結するシグネチャなのですが
以下のような形では間違っているのでしょうか?
分かる方ご教授ください。
可能ならライブラリ等を利用せず
署名を理解した上で作成したいのが理想となります。

$key = 秘密キー
$signingInput = header.payloadの連結したもの
$signature = hash_hmac("sha256", $signingInput, $key, true)
シグネチャ = urlEncode($signature);//Base64 URLエンコード

現在エンドポイントへpostをすると
chromeでは ステータスコード 400
ff では 401 を返されます。

署名を間違えているから以下のようになるのか
それ以外に原因があるのか不明です。

###試したこと
curlでポストした結果は以下

curl -v -X POST -H "Authorization: WebPush exxxxxxxxxx.eyxxxxxxxxx.cxxxxxxxxx" -H "Content-Encoding: aes128gcm" -H "Crypto-Key: p256ecdsa=Bxxxxxxxxxxx" -H "TTL: 86400" https://fcm.googleapis.com/fcm/send/xxxxxxxxx

<HTML> <HEAD> <TITLE>UnauthorizedRegistration</TITLE> </HEAD> <BODY BGCOLOR="#FFFFFF" TEXT="#000000"> <H1>UnauthorizedRegistration</H1> <H2>Error 400</H2> </BODY> </HTML>

###補足情報(言語/FW/ツール等のバージョンなど)
php
javascript

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

VAPIDの署名方式はHMAC-SHA256ではなくECDSA with SHA-256です。
(そもそも、HMACは署名に使われる方式ではありません。)

電子署名では、共通の秘密鍵を使うHMACと違って、公開鍵方式を使います。特に、VAPIDでは、

  • ブラウザ側では公開鍵をプッシュ通知購読時に登録する
  • アプリケーションサーバ側では秘密鍵を使ってECDSA署名を作成する

という点に注意が必要です。

PHPには全く明るくないため実装の詳細までは説明できませんが、恐らく標準のPHPだけではECDSAは扱えないようですので、例えばphpeccのようなライブラリが必要になるようです。

投稿2017/11/13 05:18

編集2017/11/13 05:18
othersight

総合スコア356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問