はじめに
- 昨日書いた記事の続きで、労働保険年度更新APIをVibeCodingで作成していく
- 今日は認証など
システムの前提
- Api,Service,Dao,Entityという構成
動機
- create文を書いて、Entityを書いて、Daoを書いて、Serviceを書いてと勧めるのだが、Entityを書いた後に、ふとVibeCodingでいけるんじゃないか?と思った
作業の流れ
- アクセストークンを保持するテーブルを作成して登録処理までを作成する
- SQL作成
create table egov_api_token(
id bigint auto_increment,
inserted varchar(256) not null,
insert_datetime timestamp not null,
updated varchar(256),
update_datetime timestamp,
update_seq integer,
access_token varchar(128),
expires_in timestamp,
refresh_expires_in timestamp,
refresh_token varchar(128),
token_type varchar(6),
id_token varchar(128),
not_before_policy timestamp,
session_state varchar(128),
scope varchar(32),
primary key(id)
);
- Entity作成
@IQTable(name = "egov_api_token", inheritColumns = true)
public class EgovApiToken extends AbstractTable {
/** アクセストークン. */
@IQColumn(length = 32, nullable = false)
public String access_token;
/** アクセストークンの有効期限. */
@IQColumn(length = 128, nullable = false)
public LocalDateTime expires_in;
/** リフレッシュトークンの有効期限. */
@IQColumn(length = 128, nullable = false)
public LocalDateTime refresh_expires_in;
/** リフレッシュトークン. */
@IQColumn(length = 128, nullable = false)
public String refresh_token;
/** トークンタイプ. */
@IQColumn(length = 6, nullable = false)
public String token_type;
/** IDトークン. */
@IQColumn(length = 128, nullable = false)
public String id_token;
/** アクセスが有効となる日時. */
@IQColumn(length = 128, nullable = false)
public String not_before_policy;
/** セッション状態を表す識別子. */
@IQColumn(length = 128, nullable = false)
public String session_state;
/** ユーザ認可リクエストで指定したscope. */
@IQColumn(length = 128, nullable = false)
public String scope;
public EgovApiToken() {}
}
Vibe Coding
- Chatで「EgovApiTokenのDaoを作って」を実行
public class EgovApiTokenDao {
private final Db db;
public EgovApiTokenDao(Db db) {
this.db = db;
}
public void insert(EgovApiToken token) {
db.insert(token);
}
public void update(EgovApiToken token) {
db.update(token);
}
public void delete(EgovApiToken token) {
db.delete(token);
}
public EgovApiToken findByAccessToken(String accessToken) {
EgovApiToken t = new EgovApiToken();
return db.from(t).where(t.access_token).is(accessToken).selectFirst();
}
public List<EgovApiToken> findAll() {
EgovApiToken t = new EgovApiToken();
return db.from(t).select();
}
}
これは、欲しい結果と全然違う。。
- 参考にするファイル等を開いてあげてChatで「BankApiTokenDao.javaを参考にEgovApiToken.javaのEgovApiTokenDao.javaを作って」を実行
/**
* {@link EgovApiToken}DAO.
*
* @author uchicom
*/
public class EgovApiTokenDao extends AbstractDao<EgovApiToken> {
/** コンストラクタ. */
public EgovApiTokenDao(DbHelper<EgovApiToken> helper) {
super(helper);
}
public EgovApiToken findLatest(LocalDateTime now) {
var egovApiToken = new EgovApiToken();
return helper.from(egovApiToken).where(egovApiToken.expires_in).atLeast(now).selectFirst();
}
}
求めた結果になりました。
- 反映を押下するとファイルを新規作成してくれました。
所感
- コピペで作業していた部分を、お願いすることはできる。
- 作業速度としては、コピペして名前だけ変更するほうが早い。
- AIの得意不得意を試しながら見つけていく感覚。
開発メモ
- e-Govの認証認可方式の絵がわかりずらかったので、ここにメモする。
- WEBシステムだと、登場人物は利用者ブラウザ、WEBシステム、電子申請システムとなる
WEBシステム認証認可フロー
- ブラウザで電子申請システムの認証用URLにアクセス
- 電子申請システムで認証する
- リダイレクトされてWEBシステムが表示される
- WEBシステム側では、リダイレクト時にクエリパラメータで受けった情報を電子申請システムに連携して認可コードをもらう
- WEBシステムは認可コードを電子申請システムに連携してアクセストークンをもらう
トークンの制限時間
- 認可コードタイムアウト:60秒
- リフレッシュトークン有効期限:180日
- アクセストークン有効期限:1時間