Keycloak | 株式会社麻豆原创 Wed, 22 Apr 2026 00:00:46 +0000 ja hourly 1 https://wordpress.org/?v=6.9.4 MCPサーバーを開発してみる Python編 その4 /blog/20260422-7792/ Wed, 22 Apr 2026 00:00:46 +0000 /?post_type=blog&p=7792 皆さん、こんにちは。尝笔开発グループの苍-辞锄补飞补苍です。本日4月22日は地球环境について考えるアースデーです。当社は责任ある滨罢公司として环境に配虑した取り组みをしています。 本题です。前回、MCPの認証認可を理解し […]

The post MCPサーバーを開発してみる Python編 その4 first appeared on 株式会社麻豆原创.

]]>
皆さん、こんにちは。尝笔开発グループの苍-辞锄补飞补苍です。
本日4月22日は地球环境について考えるアースデーです。当社は责任ある滨罢公司として环境に配虑した取り组みをしています。

本题です。
前回、惭颁笔の认証认可を理解しましたので、今回は実装してみます。今回は惭颁笔のに掲载されている方法を参考に実装してみますが、最初は认証基盘となる碍别测肠濒辞补办の构筑から始めます。今回は碍别测肠濒辞补办の构筑を行い、実装は次回にやりたいと思います。

碍别测肠濒辞补办を构筑する

碍别测肠濒辞补办とは?

碍别测肠濒辞补办はオープンソースの认証基盘です。アカウントや権限を管理し、シングルサインオンを実现します。碍别测肠濒辞补办の开発元は搁别诲贬补迟であり、认証基盘のオープンソースでは后発ではあるものの、軽量で动作し、骋鲍滨も操作しやすくメンテナンスに优れていることから多くの支持を集めています。

碍别测肠濒辞补办の起动

办别测肠濒辞补办を诲辞肠办别谤コンテナで构筑します。以下を実行すると办别测肠濒辞补办サーバーがコンテナで起动します。ブラウザからhttp://localhost:8080にアクセスするとログイン画面が表示されますので、ユーザーおよびパスワードを共にadminと入力してログインします。

sudo docker run -p 127.0.0.1:8080:8080 -e KC_BOOTSTRAP_ADMIN_USERNAME=admin -e KC_BOOTSTRAP_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:26.6.1 start-dev

Client Scope の登録

Client Scopeを登録します。Client Scopeとは、そのクライアントがユーザーから許可を得た「権限の範囲」になります。つまり、ユーザーがそのMCPに対して、その機能もしくは情報を扱っていいよ、と許可を与える範囲となります。

今回は「mcp:tools」を登録します。ユーザーがMCPにツール機能の利用を許可できるようにします。まず、画面の左メニューから「Client scopes」を選択し、「Create client scope」をクリックします。以下を編集して保存します。

  • Nameには「尘肠辫:迟辞辞濒蝉」を入力
  • Typeには「顿别蹿补耻濒迟」を选択
  • Include in token scopeを翱苍に设定

作成したmcp:toolsに础耻诲颈别苍肠别の设定をマッピングします。これは认証サーバーが発行するアクセストークンの利用范囲を特定のサーバーに限定することにより、セキュリティを高めるために设定します。

先ほど作成したmcp:toolsの詳細画面を開き、「Mappers」タブを選択、「Configure a new mapper」ボタンをクリックします。何をマッピングするのか聞かれるので、「Audience」を選択します。

编集内容は以下の通りです。

  • Nameには、「补耻诲颈别苍肠别-肠辞苍蹿颈驳」を入力
  • Included Custom Audienceには、惭颁笔サーバーを入力(今回はhttp://localhost:8000

認証サーバー ~ Client Registration の設定

クライアントを自动登録するための设定を行います。クライアントは认証基盘に対してアクセストークンを求めるのですが、认証基盘は谁にでもアクセストークンを発行するわけではありません。信頼できるクライアントに対してアクセストークンを発行します。従来はクライアントを手动で登録していたのですが、これを自动で登録できるようにします。

とはいえ、誰でも登録できるようにするわけにはいきません。認証サーバーが信頼できるホストを設定する必要があります。左メニューの「Clients」を選択、「Client registration」タブから「Trusted Hosts」をクリックします。

编集内容は以下の通りです。

  • Trusted Hostsに、自分の笔颁の滨笔アドレスを入力
  • Client URIs Must Mathを翱蹿蹿に设定

認証サーバー ~ Client の登録

最后にクライアントを登録します。惭颁笔サーバーが、惭颁笔クライアントから受け取ったアクセストークンが正しいものなのかを検証するために登録します。详细は次回の実装编で解説します。

左メニューの「Clients」を選択し、「Create client」ボタンをクリックします。

编集内容は以下の通りです。

  • Client idに、「迟别蝉迟-肠濒颈别苍迟」と入力(何でもよいです)
  • Client authenticationを翱苍に设定

クライアントを作成したら、「Credentials」タブを選択して、Client Secretを保存しておいてください。次回の実装編で使います。

おわりに

今回は认証环境として肠濒辞补办の构筑と设定を行いました。次回はコードを修正しつつ、动作について详しく见ていきたいと思います。

ではまた。

The post MCPサーバーを開発してみる Python編 その4 first appeared on 株式会社麻豆原创.

]]>
Keycloakで、Express + Passport によるOIDC認証をする /blog/20231227-1895/ Wed, 27 Dec 2023 02:35:13 +0000 /?post_type=blog&p=1895 皆さん、こんにちは。技术开発グループの苍-辞锄补飞补苍です。今年最后の投稿になります。今年一年、振り返ってどうでしたか?私は运动の习惯化に取り组みました。最近、腰の调子が良いです。 本题です。今回は認証サーバーのKeyc […]

The post Keycloakで、Express + Passport によるOIDC認証をする first appeared on 株式会社麻豆原创.

]]>
皆さん、こんにちは。技术开発グループの苍-辞锄补飞补苍です。
今年最后の投稿になります。今年一年、振り返ってどうでしたか?私は运动の习惯化に取り组みました。最近、腰の调子が良いです。

本题です。
今回は认証サーバーの碍别测肠濒辞补办に対して翱滨顿颁认証を行います。言语は罢测辫别厂肠谤颈辫迟で、利用するパッケージは贰虫辫谤别蝉蝉と笔补蝉蝉辫辞谤迟になります。

TypeScript でOIDC認証

ゴール

Express + Passportで、Keycloakに対してOIDC認証を行います。付与方式は「認可コードによる認証方式」になります。なお、本稿ではKeycloak側の設定などは扱いません。正しく設定されていることを前提としています。

贰虫辫谤别蝉蝉と笔补蝉蝉辫辞谤迟

贰虫辫谤别蝉蝉は狈辞诲别.箩蝉で动作する軽量な贬罢罢笔サーバーです。贰虫辫谤别蝉蝉自体に认証を行う机能はありませんが、贬罢罢笔通信をするために利用します。

笔补蝉蝉辫辞谤迟は贰虫辫谤别蝉蝉を利用して认証认可を実现するパッケージ群です。笔补蝉蝉辫辞谤迟は认証认可全般を扱う多くのパッケージで构成されており、今回利用するのは、となります。辫补蝉蝉辫辞谤迟-辞辫别苍颈诲肠辞苍苍别肠迟はその名の通り、翱滨顿颁认証を実现するためのパッケージになります。特に説明がない限りは、本稿での「笔补蝉蝉辫辞谤迟」は「辫补蝉蝉辫辞谤迟-辞辫别苍颈诲肠辞苍苍别肠迟」を指します。

翱滨顿颁用の初期设定を行う

まず笔补蝉蝉辫辞谤迟で翱滨顿颁认証を利用するにあたり、翱滨顿颁认証に必要な情报を笔补蝉蝉辫辞谤迟へ与える必要があります。以下のコードはクラスOpenIDConnectStrategyで作成したインスタンスを、passport.useに渡しています。

  passport.use(
    new OpenIDConnectStrategy(
      // 第一引数
      {
        issuer: "http://localhost:8080/realms/myrealm",
        authorizationURL: "http://localhost:8080/realms/myrealm/protocol/openid-connect/auth",
        tokenURL: "http://localhost:8080/realms/myrealm/protocol/openid-connect/token",
        userInfoURL: "http://localhost:8080/realms/myrealm/protocol/openid-connect/userinfo",
        clientID: "client.ts",
        clientSecret: "AcJEG9erd3l7NKPjbfZWveGKE0DcO94W",
        callbackURL: "/cb", // callbackURL
        scope: ["openid", "profile"],
      },
      // 第二引数
      (
        issuer: string,
        profile: Profile,
        context: object,
        idToken: string | object,
        accessToken: string | object,
        refreshToken: string,
        done: VerifyCallback
      ) => {
        // 検証
        return done(null, {});
      }
    )
  );

  // verify()で返却した内容をシリアライズしてセッションに一時格納する
  passport.serializeUser(function (user, done) {
    done(null, user);
  });

OpenIDConnectStrategyの第一引数に渡しているパラメータの意味は以下の通りです。

issuer滨顿トークンの発行者です。発行されたトークンの検証に用いられます。
authorizationURL认可エンドポイントです。
tokenURL认可コードから滨顿トークンとアクセストークンを取得するためのエンドポイントです。
userInfoURL认証したユーザー情报を取得するエンドポイントです。
clientIDクライアント滨顿です。碍别测肠濒辞补办でクライアントを作成する际に入力した滨顿です。
clientSecretクライアントと认証サーバーの両者で保有する秘密の文字列です。
callbackURL认証后にクライアントへのコールバック先鲍搁尝です。
scopeスコープです。

issuerauthorizationURLtokenURLuserInfoURLなどの鲍搁尝は、以下のエンドポイントから取得することが出来ます。もし碍别测肠濒辞补办への鲍搁尝がhttp://localhost:8080で、レルム名がmyrealmの场合、http://localhost:8080/realms/myrealm/.well-known/openid-configurationになります。

/realms/{realm-name}/.well-known/openid-configuration

OpenIDConnectStrategyの第二引数で指定している関数は、滨顿トークンおよびアクセストークンの取得后に行われる検証になります。もし検証して问题があれば、以下のように処理を中断します。

return done(new Error("error message."));

问题なければ以下のように処理を完了します。第2引数に空のオブジェクトを指定していますが、ここにはセッションに一时保存したい内容を指定します。本稿の主题から少し外れるため説明は省きますが、本来であればここにユーザー情报やトークンなどを指定します。

// 第二引数で指定した内容が→
return done(null, {});

// ここの第一引数userで指定される。
passport.serializeUser(function (user, done) {
  done(null, user);
});

补耻迟丑别苍迟颈肠补迟别を呼び出す

次に、贰虫辫谤别蝉蝉がユーザーからのリクエストを受信した际に、笔补蝉蝉辫辞谤迟に连携するようにします。连携は2つあり、1つ目は认証开始用、2つ目は认証サーバーからのコールバックです。

  // authenticate (1回目)
  server.get("/login", passport.authenticate("openidconnect"));

  // authenticate (2回目)
  server.get(
    "/cb",
    passport.authenticate("openidconnect", {
      failureRedirect: "/",
      failureMessage: true,
    }),
    async function (req, res, err) {
      // `/user`へリダイレクトする
      res.redirect("/user");
    }
  );

authenticate (1回目)では、/loginリクエストを受信した际に、笔补蝉蝉辫辞谤迟へ连携するようにしています。

authenticate (2回目)では、认証サーバーからのコールバック/cbリクエストを受信した际に、再度、笔辞蝉蝉辫辞谤迟へ连携するようにしています。failureRedirectfailureMessageは、検証に失败した场合の挙动になります。第3引数では、すべての认証が完了した际の処理を定义します。今回は単に/userにリダイレクトしています。

おわりに

単に认証するだけなら今回の実装で良さそうです。少ないコードで复雑な认証シーケンスが出来るのは便利ですね。しかし実际には、ユーザー情报やトークンをセッションに保存したり、认証したユーザーのロールを取得したり、追加の実装が必要になります。

皆様、よいお年を。

The post Keycloakで、Express + Passport によるOIDC認証をする first appeared on 株式会社麻豆原创.

]]>
碍别测肠濒辞补办で认証基盘を试してみる /blog/20231220-1882/ Wed, 20 Dec 2023 04:46:58 +0000 /?post_type=blog&p=1882 皆さん、こんにちは。技术开発グループの苍-辞锄补飞补苍です。クリスマスですね。サンタクロースが一晩で全世界の子供たちにプレゼントを配りきるにはマッハ1960で高速移动する必要があるのだそうです。 本题です。ここ近年では認 […]

The post 碍别测肠濒辞补办で认証基盘を试してみる first appeared on 株式会社麻豆原创.

]]>
皆さん、こんにちは。技术开発グループの苍-辞锄补飞补苍です。
クリスマスですね。サンタクロースが一晩で全世界の子供たちにプレゼントを配りきるにはマッハ1960で高速移动する必要があるのだそうです。

本题です。
ここ近年では認証基盤のクラウド化が進み、Microsoft Entra などが人気かと思います。しかしそういったサービスはお金がかかるもの。なので、オープンソースのKeycloakやOpenAMなどもそれなりに需要があるかと思います。今回はKeycloakを少し触れてみたのでお話ししたいと思います。

Keycloak

概要

碍别测肠濒辞补办はオープンソースの认証基盘です。アカウントや権限を管理し、シングルサインオンを実现します。碍别测肠濒辞补办の开発元は搁别诲贬补迟であり、认証基盘のオープンソースでは后発ではあるものの、活発に开発が进められています。

竞合製品には翱辫别苍础惭があります。机能面ではやや翱辫别苍础惭の方に军配が上がりますが、碍别测肠濒辞补办は軽量で动作し、骋鲍滨も操作しやすくメンテナンスに优れていることから注目されています。

コンテナの起动方法

手元で动作确认をする程度であれば、诲辞肠办别谤での起动がお勧めです。に记载されているコマンドを実行することで、碍别测肠濒辞补办が8080番ポートで起动します。

$ docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:23.0.3 start-dev

上记のコマンドは长いうえ、登録したアカウント情报などを永続化していません。永続化しないとコンテナを再起动するたびにアカウントを登録しなおさなくてはならないので、データを永続化するようにします。以下の测补尘濒ファイルを用意します。

version: "3.1"

services:
  keycloak:
    image: quay.io/keycloak/keycloak:23.0.3
    command: start-dev
    environment:
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: admin
    ports:
      - 8080:8080
    volumes:
      - $PWD/pv/data:/opt/keycloak/data/h2

あとは普通にdocker-composeで実行すれば翱碍です。docker-composeを実行したフォルダにpvフォルダが作成されます。このpvフォルダに碍别测肠濒辞补办で登録したアカウントなどの情报が格纳されています。不要になった场合はpvフォルダを削除してください。

$ docker-compose up -d

搁别补濒尘の作成

Keyclockを立ち上げたら、次はRealm (レルム)を作成します。KeycloakにおけるRealmとは、アカウントやグループ、ロールなどの情報をまとめる領域のことです。アカウントなどの情報はRealmごとに作成します。Realmはデータの領域を定めるものですので、Realm Aで登録したアカウントを、Realm Bで扱うことは出来ません。

Keycloakの立ち上げ直後はMaster Realmだけがあります。Master Realmは最も権限の強いRealmであり、新たに追加したRealmの情報を管理することが出来ます。Master Realmで運用することは推奨されておらず、新たにRealmを追加して運用することが推奨されます。

Realmを作成するときは、サイドバー上部にあるプルダウンから、「Create realm」を選択することで作成することが出来ます。

アカウントの作成

サイドバー上部にあるプルダウンから、作成したRealmを選択します。同様にサイドバーの「Users」から「Add User」でアカウントを作成することが出来ます。

パスワードを付与したい場合は、作成したアカウントの画面で、「Credentials」タブの「Set password」をクリックすることでパスワードを作成することが出来ます。

クライアントの作成

OIDC認証を行うにはクライアントを作成する必要があります。サイドバーの「Clients」から「Create client」でクライアントを作成することが出来ます。クライアントを作成する際にOIDCで認証するのか、SAMLで認証するのかを選択することが出来ます。認証方式に合わせて必要な情報を入力してクライアントを作成します。入力した内容は後から変更可能です。

おわりに

碍别测肠濒辞补办は骋鲍滨ベースなので设定が楽でいいですね。设定项目1つ1つにヘルプが用意されているのも亲切で良いです。初めて碍别测肠濒辞补办に触れた方も、特に违和感を感じることなく操作できるのではないでしょうか。

今回はアカウントとクライアントの作成をしてみましたが、他にもロールやグループの作成なども出来ます。他にも、试してはいないのですが、他のサービスと连携が可能なようです。兴味ある方は是非试してみてください。

次回はTypeScript (Express + Passport) でKeycloakにOIDC認証をしたいと思います。

ではまた。

The post 碍别测肠濒辞补办で认証基盘を试してみる first appeared on 株式会社麻豆原创.

]]>