Skip to content

Instantly share code, notes, and snippets.

@ritou
ritou / crypt_jwt_sample_jws_exXXX.pl
Created November 16, 2015 13:30
Crypt::JWTを用いてESXXXなJSON Web Signatureをごにょごにょするサンプル
use Crypt::JWT qw(encode_jwt decode_jwt);
use Crypt::PK::ECC;
use MIME::Base64 qw(decode_base64url);
use Data::Dumper;
warn "=== Example JWS Using ECDSA P-256 SHA-256 ===\n";
warn "see https://tools.ietf.org/html/rfc7515#appendix-A.3\n";
warn "=== Private Key ===\n";
my $ec_jwk_data = {
@ritou
ritou / crypt_jwt_sample_jws_rs256.pl
Created November 16, 2015 06:03
Crypt::JWTを用いてRS256なJSON Web Signatureをごにょごにょするサンプル
use Crypt::JWT qw(encode_jwt decode_jwt);
use Crypt::PK::RSA;
use MIME::Base64 qw(decode_base64url);
use Data::Dumper;
warn "see https://tools.ietf.org/html/rfc7515#appendix-A.2\n";
my $payload = decode_base64url("eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ");
my $rsa_priv_data = {
"kty" => "RSA",
"n" => "ofgWCuLjybRlzo0tZWJjNiuSfb4p4fAkd_wWJcyQoTbji9k0l8W26mPddxHmfHQp-Vaw-4qPCJrcS2mJPMEzP1Pt0Bm4d4QlL-yRT-SFd2lZS-pCgNMsD1W_YpRPEwOWvG6b32690r2jZ47soMZo9wGzjb_7OMg0LOL-bSf63kpaSHSXndS5z5rexMdbBYUsLA9e-KXBdQOS-UTo7WTBEMa2R2CapHg665xsmtdVMTBQY4uDZlxvb3qCo5ZwKh9kG4LT6_I5IhlJH7aGhyxXFvUK-DWNmoudF8NAco9_h9iaGNj8q2ethFkMLs91kzk2PAcDTW9gb54h4FRWyuXpoQ",
@ritou
ritou / crypt_jwt_sample_jws_es512.pl
Created November 14, 2015 15:06
sample for Crypt::JWT
use Crypt::JWT qw(encode_jwt decode_jwt);
use Data::Dumper;
# encode
my $payload = "Payload";
my $ecc_priv = {
kty => "EC",
crv => "P-521",
x => "AekpBQ8ST8a8VcfVOTNl353vSrDCLLJXmPk06wTjxrrjcBpXp5EOnYG_NjFZ6OvLFV1jSfS9tsz4qUxcWceqwQGk",
use Crypt::OpenSSL::CA;
use Crypt::OpenSSL::Bignum;
use Crypt::OpenSSL::RSA;
use MIME::Base64 qw/encode_base64url decode_base64url/;
use Data::Dumper;
# Crypt::OpenSSL::CA to n and e
my $rsa_pubkey = "-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5XxKc3Rz/8EakvZG+Ez9
nCpdn2HGVq0CRD1GZ/fEuM7nHfmy1LzC0VyNa8YkU7Qrb4s/BgSxjFrLvbpFHcUo

OAuth 2.0のプロトコルでソーシャルログイン的なことを実現するための独自Profile案

何の話か

  • モバイルアプリのバックエンドサーバーがOAuth 2.0のEndpointを持ってて、Access Tokenを発行してアプリのセッション代わりに使う
  • バックエンドサーバーがOAuth Server、モバイルアプリがOAuth Client
  • モバイルアプリがソーシャルログインやりたい
  • SNSからすると(モバイルアプリ + バックエンドサーバー)全体がOAuth Client
  • SNSから受け取るものは、AuthZ CodeとかAccess TokenとかID Tokenとかけっこうバラバラ
  • バックエンドサーバーとしてはそれらを受けとって、Access Tokenを返す、汎用的なToken Endpointのgrant_typeが欲しい
@ritou
ritou / trans_oidc_core.txt
Last active August 29, 2015 13:56
Core翻訳の分担
わりと細かく分けました。
担当する宣言はコメント or メールでください!
URL : http://openid.net/specs/openid-connect-core-1_0.html
(1) 1 - 1.2 : ritou
(2) 1.3 - 2 : kura
(3) 3 - 3.1,1 : konfoo
(4) 3.1.2 - 3.1.2.1 : bangyy
(5) 3.1.2.2 - 3.1.2.4 : sat_toke
$ cat test.pl
use strict;
use warnings;
use Authen::OATH;
use Data::Dumper;
my $oath = Authen::OATH->new();
my $totp = $oath->totp( "1234567890", 1332083784 );
print Dumper($totp);
@ritou
ritou / bad_password_check.pl
Created June 28, 2013 01:39
Test result fot Data::Password module.
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Password qw(:all);
$DICTIONARY = 8;
$FOLLOWING = 0;
$FOLLOWING_KEYBOARD = 0;

medyはOpenID Providerである

medyでログインしてるサービス

http://med.astrazeneca.co.jp/login/relogin.asp

ボタン押した後に送られるリクエスト

https://medy-id.jp/openid/endpoint.html?

openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&

@ritou
ritou / client_side.html
Created March 1, 2013 17:02
This is Google+ Sign-In client-side sample.
<html>
<head>
<title>Google+ Sign-in button demo</title>
<style type="text/css">
html, body { margin: 0; padding:0;}
#signin-button {
padding: 5px;
}
#oauth2-results pre { margin: 0; padding:0;}