コピペコードで快適生活

明日使えるソースを自分のために

JWTについて

JWS/JWE/JWT/IDトークンってなに?

https://qiita.com/TakahikoKawasaki/items/1c1bcf24b46ebd2030f5 https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-id-token.html

  • 直列化方式として2つある
    • JWS (JSON Web Signature)
    • JWE (JSON Web Encryption)
  • それぞれ JSON 形式とコンパクト形式がある。
  • JWT (JSON Web Token) は JWS か JWE を使用する
    • いずれにしてもコンパクト形式を使用する。
  • IDトークンとは?
    • name、email、および phone_number など、認証されたユーザーのアイデンティティに関するクレームが含まれるJWT
    • ID トークンは JWS もしくは「JWS を含む JWE」という形式をとる。
    • ID トークンには署名が必要

JWS署名について

https://www.engineer-memo.net/20180716-4614

  • 広義のjwtは署名付きのjson全体のこと
  • 狭義のjwtはpayloadのこと
    • JWTでは、Claim (Keyと値=パラメーターの事)として、基本的な Key の値が予約されている。
    • 例えば、"iss"は、"Issuer Claim(発行者)"、"exp"は、"Expiration Time Claim(有効期限)" として予約されている。
    • 独自の値を追加する事もできる。
  • 「JWS署名」とは
    • 「JOSE ヘッダー」と、「JWSペイロード」を「・」でつないだ値を入力にして、 HMAC SHA-256 で署名を作り、BASE64URL に変換したもの。
  • JWS Compact Serialization
    • 「JOSE ヘッダー」「JWSペイロード」「JWS署名」を「.」でつなぐ
  • HMAC(共通鍵暗号方式)
    • RSAではなくこっち使うのが一般的らしい。

HMACについて

https://www.infraexpert.com/study/ipsec4.html - 秘密鍵は文字列の並びであればなんでもよさそう。

RS256,HS256とは

https://www.web-dev-qa-db-ja.com/ja/jwt/rs256%E3%81%A8hs256%E3%81%AE%E9%81%95%E3%81%84%EF%BC%9A%E9%81%95%E3%81%84%E3%81%AF%E4%BD%95%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F/826436771/

  • RS256: SHA-256を持つRSA署名 (公開鍵)
  • HS256: HMAC with SHA256 (共通鍵)

jwa: JSON Web Algorithm 暗号化アルゴリズム

https://kiririmode.hatenablog.jp/entry/20170225/1488020088

npmライブラリで型情報を提供するには

https://typescriptbook.jp/reference/declaration-file に書いてあった。

Phaserの場合

Phaserの場合は「JavaScriptで書かれたパッケージだが.d.tsファイルを同梱している」に該当する。

型定義ファイルの場所はpackage.jsonに記載がある。 https://github.com/photonstorm/phaser/blob/v3.55.2/package.json#L12

"types": "./types/phaser.d.ts",

Phaserの場合は、型生成ツールを使って作成しているようだ。 https://github.com/photonstorm/phaser/tree/5c8ecbcf999e6f328d21884e877c9e5935d2d350/scripts/tsgen

libmysqlclient.so.18: cannot open shared object file

rails s で libmysqlclient.so ない言われたときの調査メモ

こんなエラーがでる

libmysqlclient.so.18: cannot open shared object file: No such file or directory - /path/to/mysql2.so (LoadError)

libmysqlclientがインストールされているか確認する

# ライブラリ名を確認する
apt search libmysqlclient

# ライブラリの情報を確認する
apt show libmysqlclient-dev

# どのパスにインストールされているか確認する
dpkg -L libmysqlclient-dev

共有ライブラリのパスが通っているか

以下に探索パスが登録されている

  • /etc/ld.so.conf
  • /etc/ld.so.conf.d/*

参考: https://linuc.org/study/knowledge/545/

リンクされているか

ldd /path/to/mysql2.so
# 略
libmysqlclient.so.18 => not found # おっとー
# 略

vendor/bundle以下に古いファイルが残っていて、何かおかしいことになってたのかも。 vendor/bundle以下を削除して、bundle install しなおしたら復帰しました。

crypt関数とかglibcとか

WordPressのDBに保存されているハッシュ化されたパスワードの値が気になったので調べた話 を読む過程で crypt関数 ってなんだっけ?となったので、調べたことメモ。

PHPのcrypt関数

Rubyのcrypt関数

crypt関数

manページとは

標準ライブラリ

  • 標準ライブラリの名前は「libc」
  • GNUプロジェクトによる実装として「glic」がある

バージョンは以下で確認できる

# yumコマンドを使う場合
yum list installed | grep glibc

# rpmコマンドを使う場合
rpm -q glibc

リンク

  • libcなどのライブラリは、動的リンクか静的リンクされてプログラムから使用される
  • 静的リンク
    • コンパイル時にライブラリごと実行ファイルに取り込む方式
  • 動的リンク
    • プログラム実行時にライブラリを取り込んで起動する方式
    • 動的リンクで扱うライブラリは共有ライブラリと呼ばれる
      • 共有ライブラリファイルの拡張子
    • PHPRubyはlibcを動的リンクしている

指定ファイルの動的リンク先を確認する

# linux
ldd /usr/bin/php

# mac
otool -L /usr/bin/php

git submodule

# submoduleの追加
git submodule add git@github.com:kinosuke01/xxxxx.git xxxxx

# submoduleの状態確認
# どのコミットハッシュのバージョンが
# submoduleとして登録されているかを確認できる
git submodule

# submodule内でコミットを積んだ場合は、
# 親リポジトリが参照するコミットハッシュも更新する必要がある
git submodule
git add .
git commit -m "update submodule"

# submodule内でブランチ変えたりコミットを積んでる状態から
# 親リポジトリがもともと参照しているバージョンに切り戻す
git submodule update

# はじめて親リポジトリをcloneしたときは
# submoduleのinitとupdateを同時に行う
git submodule update -i

links

wgetがリダイレクトしまくってエラーする

wgetがリダイレクトしまくってエラーする現象に出くわしたのでメモ。

自分の環境

golang:1.7

どんなエラーでてる?

root@7453a9101b5e:/var/app# wget --max-redirect=1 https://github.com/wp-cli/wp-cli/releases/download/v2.5.0/wp-cli-2.5.0.phar
converted 'https://github.com/wp-cli/wp-cli/releases/download/v2.5.0/wp-cli-2.5.0.phar' (ANSI_X3.4-1968) -> 'https://github.com/wp-cli/wp-cli/releases/download/v2.5.0/wp-cli-2.5.0.phar' (UTF-8)
--2021-12-02 07:31:42--  https://github.com/wp-cli/wp-cli/releases/download/v2.5.0/wp-cli-2.5.0.phar
Resolving github.com (github.com)... 52.69.186.44
Connecting to github.com (github.com)|52.69.186.44|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/2360755/ae27af00-b8c0-11eb-8a65-ec58a9e54400?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20211202%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20211202T073059Z&X-Amz-Expires=300&X-Amz-Signature=86171b4129a9e57e04e99ccfa77650440c906a3adc2831ed086b4495920c95df&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=2360755&response-content-disposition=attachment%3B%20filename%3Dwp-cli-2.5.0.phar&response-content-type=application%2Foctet-stream [following]
converted 'https://objects.githubusercontent.com/github-production-release-asset-2e65be/2360755/ae27af00-b8c0-11eb-8a65-ec58a9e54400?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20211202%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20211202T073059Z&X-Amz-Expires=300&X-Amz-Signature=86171b4129a9e57e04e99ccfa77650440c906a3adc2831ed086b4495920c95df&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=2360755&response-content-disposition=attachment%3B%20filename%3Dwp-cli-2.5.0.phar&response-content-type=application%2Foctet-stream' (ANSI_X3.4-1968) -> 'https://objects.githubusercontent.com/github-production-release-asset-2e65be/2360755/ae27af00-b8c0-11eb-8a65-ec58a9e54400?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A/20211202/us-east-1/s3/aws4_request&X-Amz-Date=20211202T073059Z&X-Amz-Expires=300&X-Amz-Signature=86171b4129a9e57e04e99ccfa77650440c906a3adc2831ed086b4495920c95df&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=2360755&response-content-disposition=attachment; filename=wp-cli-2.5.0.phar&response-content-type=application/octet-stream' (UTF-8)
--2021-12-02 07:31:42--  https://objects.githubusercontent.com/github-production-release-asset-2e65be/2360755/ae27af00-b8c0-11eb-8a65-ec58a9e54400?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A/20211202/us-east-1/s3/aws4_request&X-Amz-Date=20211202T073059Z&X-Amz-Expires=300&X-Amz-Signature=86171b4129a9e57e04e99ccfa77650440c906a3adc2831ed086b4495920c95df&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=2360755&response-content-disposition=attachment;%20filename=wp-cli-2.5.0.phar&response-content-type=application/octet-stream
Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.111.133, 185.199.110.133, 185.199.108.133, ...
Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.111.133|:443... connected.
HTTP request sent, awaiting response... 401 Unauthorized

Username/Password Authentication Failed.
--2021-12-02 07:31:42--  https://github.com/wp-cli/wp-cli/releases/download/v2.5.0/wp-cli-2.5.0.phar
Connecting to github.com (github.com)|52.69.186.44|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/2360755/ae27af00-b8c0-11eb-8a65-ec58a9e54400?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20211202%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20211202T073059Z&X-Amz-Expires=300&X-Amz-Signature=86171b4129a9e57e04e99ccfa77650440c906a3adc2831ed086b4495920c95df&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=2360755&response-content-disposition=attachment%3B%20filename%3Dwp-cli-2.5.0.phar&response-content-type=application%2Foctet-stream [following]
converted 'https://objects.githubusercontent.com/github-production-release-asset-2e65be/2360755/ae27af00-b8c0-11eb-8a65-ec58a9e54400?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20211202%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20211202T073059Z&X-Amz-Expires=300&X-Amz-Signature=86171b4129a9e57e04e99ccfa77650440c906a3adc2831ed086b4495920c95df&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=2360755&response-content-disposition=attachment%3B%20filename%3Dwp-cli-2.5.0.phar&response-content-type=application%2Foctet-stream' (ANSI_X3.4-1968) -> 'https://objects.githubusercontent.com/github-production-release-asset-2e65be/2360755/ae27af00-b8c0-11eb-8a65-ec58a9e54400?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A/20211202/us-east-1/s3/aws4_request&X-Amz-Date=20211202T073059Z&X-Amz-Expires=300&X-Amz-Signature=86171b4129a9e57e04e99ccfa77650440c906a3adc2831ed086b4495920c95df&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=2360755&response-content-disposition=attachment; filename=wp-cli-2.5.0.phar&response-content-type=application/octet-stream' (UTF-8)
1 redirections exceeded.

似たような現象に出くわしている人がいた

https://github.com/hashicorp/packer/issues/2392

For me it was local encoding issue try wget --local-encoding=UTF-8

だって。

実際やってみた

wget --local-encoding=UTF-8 https://github.com/wp-cli/wp-cli/releases/download/v2.5.0/wp-cli-2.5.0.phar

動いた!

どういうこと?

  • wgetはIRI (ユニコード対応版URI) をサポートしている。
  • IRIのリモートのエンコーディングUTF-8 、ローカルのエンコーディングANSI_X3.4-1968 となっていた。
  • サーバから受け取ったリダイレクト先のアドレスを ANSI_X3.4-1968 から、UTF-8 に変換しようとしていた。
  • この変換で正しくないアドレスが生成され、アクセスしてもエラーする状態となっていた。

ということかな。間違ってるかもしれないけど。

wgetのオプションについて

--no-iri IRI サポートを使わない
--local-encoding=ENC 指定した ENC を IRI のローカルエンコーディングにする
--remote-encoding=ENC 指定した ENC をデフォルトのリモートエンコーディングにする