認証方法

方法1.JWT認証

JWT(Json Web Token)認証は、有効期限のあるtokenを使用せずにAPIを実行でき、またtoken取得時にシークレットキーを送信せずに済むため、BEARER認証より比較的安全です。現在CodenbergではAPI使用時にはJWT認証を推奨しています。

様々な言語用に、JWTを実行するためのライブラリが存在するので、そちらをご利用いただくか、自前でJWTを実装してください。

APIキーの取得

以下のページから取得してください。

ペイロード

送信していただくペイロードは以下の通りです。

## 例
{
   "sub": "xxxxxyyyyyyzzzzz",
   "iat": 12345678901234,
   "aud": "/test/of/url" 
}                    
                

署名アルゴリズム

HS256を使用してください。

認証エラーについて

APIキーの間違い、署名に使用したシークレットキーの間違い、アルゴリズムの間違いの他に、以下の理由で認証をエラーとしています。

JWTをhttpヘッダに設定する

httpヘッダ'Authorization'に、文字列[JWT ]に続いて作成したjwtを設定してください。

##例
header['Authorization'] = "JWT " + $created_jwt_in_hear;                    
                

送信

実際に呼び出す弊社API(例: /templates/{template_id})のhttpヘッダに上記Authorizationを設定して通信して下さい。

サンプル

Ruby

# USE https://github.com/jwt/ruby-jwt
#
# Encoder class
require 'jwt'
class JwtEncoder

    ALG = 'HS256'

    def initialize(key,secret)
        @key = key
        @secret = secret
    end

    def encode(path)
        payload = {
            sub: @key,
            iat: Time.now.to_i,
            aud: path
        }
        token = JWT.encode(payload, @secret, JwtEncoder::ALG)
        return token
    end

end
########################
### code example
path = "/v1/templates/#{my_template_id}"

# Create Json Web Token
jwtEncoder = JwtEncoder.new(my_api_key,my_api_secret)
jwt = jwtEncoder.encode(path)

fullPath = "https://api.codenberg.io#{path}"
url = URI.parse(fullPath)
request = Net::HTTP::Get.new(url.path)

# Set auth header
request["Authorization"] = "JWT #{jwt}"

connection = Net::HTTP.new(url.host, url.port)
connection.use_ssl = true
connection.verify_mode = OpenSSL::SSL::VERIFY_NONE
response = connection.start do |http|
    http.read_timeout = @readTimeOut
    http.request(request)
end

                

PHP

//USE https://github.com/firebase/php-jwt
use Firebase\JWT\JWT;
class JwtEncoder{

    const ALG = 'HS256';

    private $key = null;
    private $secret = null;
    public function __construct($key,$secret){
        $this->key = $key;
        $this->secret = $secret;
    }

    public function encode($path){
        $tm = time();

        $payload = array(
            "sub" => $this->key,
            "iat" => time(),
            "aud" => $path,
        );

        $jwt = JWT::encode($payload, $this->secret,JwtEncoder::ALG);
        return $jwt;
    }
}

// Code Example
//
$jwtEncoder = new JwtEncoder($key, $secret);
$token = $jwtEncoder->encode("/v1/templates/{$my_template_id}");                

$url = "https://api.codenberg.io" . "/v1/templates/{$my_template_id}";
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$headers = array(
    "Authorization: JWT {$token}",
);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
$html =  curl_exec($curl);
                

方法2.BEARER認証

過去に提供していたBEARER方式も引き続き提供しております。token取得時にAPIキーとシークレットキーを送信しますので、送信先のホストを間違えたりしないようご注意ください。

APIキーの取得

以下のページから取得してください。

トークンの取得

Basic認証でトークンを取得します。Authorizationヘッダに、APIキーとシークレットキーを設定して、GETメソッドで/v1/auth/tokenにアクセスします。

# Smaple code              
#!/bin/sh
APIKEY='xxxxx' #APIキー
SECRET='yyyyy' #シークレットキー
ENCODED=`echo ${APIKEY}:${SECRET} | base64`
curl https://api.codenberg.io/v1/auth/token -H "Authorization: Basic ${ENCODED}"                    
                

戻り値は以下のようにJSONで返ります。

{
    "token_type": "bearer",
    "access_token": "2f9af46b0212394aecc9a03e7190834a1ff4ffc1fb9f02e6a1c3ef3f32520664",
    "expires": "2019-07-17T16:46:08.724+09:00"
}
                

APIの呼び出し

AuthorizationヘッダにBEARER access_tokenを設定してAPIを呼び出します。

curl -H "Authorization: BEARER [上で取得したaccess_token]" https://api.codenberg.io/v1/xxxxx

BEARER認証の注意点

© 2016 Codenberg | Amazing Day Inc.