Successfully reported this slideshow.
Your SlideShare is downloading. ×

認証Gwのプロトタイプでgolang使ってみた20171024

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 22 Ad
Advertisement

More Related Content

Recently uploaded (20)

Advertisement

認証Gwのプロトタイプでgolang使ってみた20171024

  1. 1. Copyright©2017 KAMOME Engineering, Inc. All rights reserved. 認証GWのプロトタイプで Golang使ってみた 納村 康司 かもめエンジニアリング株式会社 2017年10月24日
  2. 2. 認証GWのプロトタイプでGolang使ってみた 1 ■ 自己紹介・会社紹介 ■ あるときこんなお仕事が ■ Golangを使うチャンス ■ Golangのいいところ ■ Golangのはまりケース2つ Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
  3. 3. 自己紹介 2 ■ 氏名 納村 康司(おさむら こうじ) @osakichi(Twitter)、osakichi(GitHub) ■ 所属 かもめエンジニアリング株式会社 http://kamome-e.com/ ■ 役割 取締役・技術者 ■ 事業内容 コンピュータソフトウェアおよびハードウェアの 研究、開発、販売、サポート (主に認証関係) Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
  4. 4. かもめの活動分野 3 ■ 製品分野 通信事業者・企業向けの 認証パッケージソフトウェアおよびソリューション ■ 主力製品 アプリSSO認証ソリューション「KAMOME SSO」 統合認証基盤「KFEP」 RADIUS認証サーバ「Fullflex」、などなど ■ 開発言語 Java、C++、C、ちょっとJavaScriptやPython Golangは社内/社外に布教中 (他社から引き継いだ「Fullflex」はGolangだけど) Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
  5. 5. 他にもかもめはこんなことも 4 当社プロダクトに関係するテーマで 小規模勉強会を開催しています。 『Diameter プロトコルガイド』を 出版しました。 会議中の落書きを 缶バッチにしました。 Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
  6. 6. 5 あるとき こんなお仕事が Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
  7. 7. 案件ご要望内容 6 ■ サービスで様々な認証方式を使えるソリューションが欲しい。 ID/PW以外にも、ワンタイムパスワードとか、指紋認証とか。 ■ フロントアプリからは統一されたAPIで利用したい。 ■ 多要素認証に対応し、かつ認証方式が増えても、 フロントアプリの改修は行わないようにしたい。 ■ まずはプロトタイプを作成して、コンセプト検証から。 コンセプト検証なので開発言語は何でもいい。 Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
  8. 8. 7 いわゆる 「認証ゲートウェイ」 Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
  9. 9. 構成概念図 8Copyright©2017 KAMOME Engineering, Inc. All rights reserved. フロント アプリ (既存) 認証GW(開発範囲) API 受付 ID/PW認証 対応モジュール OTP認証サーバ (他社製品) 指紋認証サーバ (他社製品) OTP認証 対応モジュール 指紋認証 対応モジュール ID/PW認証サーバ (既存) ・ ・ ・ ・ ・ ・ 共通API 認証方式ごとに 対応モジュールに 処理を振り分け 認証方式の 追加は モジュールの 追加で対応 認証方式固有の プロトコル処理は 対応モジュールで処理 フロントアプリからは 何れの認証方式も 共通のAPIで利用
  10. 10. 9 Golangを使う チャーンス! Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
  11. 11. Golangによる実装方針 10 ■ 共通APIの提供および各種認証サーバのAPI呼び出しには、 net/httpパッケージを利用。 ■ 共通APIのJSONパラメタは、当面interface{}に変換して 柔軟に設計を検討、設計が固まったらstruct{}にして高速化。 ■ 認証対応モジュールはinterface{}でI/Fを共通化。 新たな認証方式の対応に備える。 ■ 少なくともプロトの段階までは、標準パッケージだけを使う。 Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
  12. 12. 11 Golangのいいところ Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
  13. 13. Golangのいいところ(1) 12 ■ とりあえず動かすプロトタイプから、 ガチガチに設計したプロダクトまで、対応の幅が広い。 ■ ネイティブコードを生成しVMに依存しない。 ■ コンパイラのエラーメッセージが分かりやすい。 ■ 使用するパッケージの選択に悩まなくてよい。 (標準パッケージで一通りのことはできる) Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
  14. 14. Golangのいいところ(2) 13 ■ 統一されたコーディングスタイルが、 標準で提唱されている。 ■ 文法がJava、C++/C、JavaScript、Python等々と比べて どれとも似ていない(各言語を渡り歩くと特に重要)。 ■ などなど、などなど。。。 Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
  15. 15. 14 はまりケース1 Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
  16. 16. はまりケース1(1) 15Copyright©2017 KAMOME Engineering, Inc. All rights reserved. package main import "fmt" func main() { x := "Hello World!" // 初期値 if true { // 何らかの条件文(とりあえず常にtrue) x := "different≠another" // 条件により値置き換え } fmt.Println(x) } ■ :=演算子は便利だけど、 LL感覚で多用すると危険 ■ 結果が"different≠another"にならない??? コンパイルエラーも出ないので発見しづらい
  17. 17. はまりケース1(2) 16Copyright©2017 KAMOME Engineering, Inc. All rights reserved. package main import "fmt" func main() { var x = "Hello World!" // 初期値 if true { // 何らかの条件文(とりあえず常にtrue) x = "different≠another" // 条件により値置き換え } fmt.Println(x) } ■ 変数スコープの問題だけど明示的にvarを書いた方が無難 ■ これで結果が"different≠another"と意図したものになった (型推論ぐらいは使ってもいいかも)
  18. 18. 17 はまりケース2 Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
  19. 19. はまりケース2(1) 18Copyright©2017 KAMOME Engineering, Inc. All rights reserved. package main import "bufio" import "encoding/json" import "os" func main() { var data interface{} reader := bufio.NewReader(os.Stdin) json, _, _ := reader.ReadLine() // JSONデータをキー入力して json.Unmarshal(json, &data) // 内部データに変換 } ■ importしているパッケージが使えない? ■ コンパイラに「json.Unmarshal()が無い」と怒られる
  20. 20. はまりケース2(2) 19Copyright©2017 KAMOME Engineering, Inc. All rights reserved. package main import "bufio" import "encoding/json" import "os" func main() { var data interface{} reader := bufio.NewReader(os.Stdin) raw, _, _ := reader.ReadLine() // JSONデータをキー入力して json.Unmarshal(raw, &data) // 内部データに変換 } ■ パッケージ名と被る変数名は使わない(まぁあたりまえ) ■ どうしても特定の名前を変数で使いたい場合は、 パッケージ名の方を変える方法もあるらしい
  21. 21. まとまってないまとめ 20 ■ Golangはプロトタイプコードからプロダクト開発にまで、 幅広く便利に使える。 ■ いろいろ言われている「いいところ」はホントに素敵。 (特にC++/Cから流れてくると実感) ■ 微妙なクセやはまりどころもあるので、研鑽を積みましょう。 ■ 継続して社内/社外に布教中。 フルスクラッチで何かを作る機会を虎視眈々と。 Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
  22. 22. Copyright©2017 KAMOME Engineering, Inc. All rights reserved. ありがとうございました!

×