検索

Question
· Juil 30, 2024

Generate JWT token

Hi there,

My purpose is to encrypt a communication using JWT tokens.  I am developing on IRIS and my purpose is to generate a JWT token that will run on an older version of Cache (so I have to use functions that are compatible with the older version, Cache).

I wrote this code in IRIS:

s username = "user-test123"
set st = ##class(%OAuth2.Utils).TimeInSeconds($ztimestamp,0)
set et = ##class(%OAuth2.Utils).TimeInSeconds($ztimestamp, 60*15)

s payload = {"id": "test-id-123", "username": "test-username"}
s payload.exp = et
s payload.time = st

s alg = "HS256"
s JOSE("sigalg") = alg

s secret = "Dw/G:+@%VR[a$LV,D4L{5+(4I}+zf+ER" // $system.Encryption.GenCryptRand(32)
s secret = $System.Encryption.Base64Encode(secret)

s jwks = { "keys": [{ "alg": (alg), "k": (secret) }] }
s jwks = jwks.%ToJSON()

d ##class(%OAuth2.JWKS).AddOct("HS256",secret,.jwks)

s jwks =  ##class(%DynamicAbstractObject).%FromJSON(jwks)

This code works and the output is so:

 USER>zw
 
JOSE("sigalg")="HS256"
alg="HS256"
et=1722327153
jwks=<OBJECT REFERENCE>[38@%Library.DynamicObject]
payload=<OBJECT REFERENCE>[1@%Library.DynamicObject]
secret="RHcvRzorQCVWUlthJExWLEQ0THs1Kyg0SX0remYrRVI="
st=1722326253
username="user-test123"

USER>zw jwks
jwks={"keys":[{"alg":"HS256","k":"RHcvRzorQCVWUlthJExWLEQ0THs1Kyg0SX0remYrRVI="},{"kty":"oct","k":"UkhjdlJ6b3JRQ1ZXVWx0aEpFeFdMRVEwVEhzMUt5ZzBTWDByZW1ZclJWST0","alg":"HS256"}]}  ; <DYNAMIC OBJECT>

%OAuth2.JWKS.AddOct  generated a key in the 3rd argument, "jwks".   In the same argument I passed the input key, that is jwks.keys.k = "...secret...".

I discovered this by chance, trying many possibilities.   There is no place where I could find a working example that generated a pool of keys of type OAuth2.JWKS.

My first question is, why does it work in this form and, is there a simpler way to generate the JWKS ?

Next, the purpose is to encode a json.  In order for OAuth2.JWT.ObjectToJWT to work, I had to remove the key {"alg":"HS256","k":"RHcvRzorQCVWUlthJExWLEQ0THs1Kyg0SX0remYrRVI="}  that I initially inserted in jwks and keep only the key generated by OAuth2.JWKS.AddOct.  So I did so:

s newjwks = {}
s newjwks.keys=[]
d newjwks.keys.%Push(jwks.%Get("keys").%Get(1))
s newjwks = newjwks.%ToJSON()

d ##class(%OAuth2.JWT).ObjectToJWT(.JOSE, payload, newjwks, newjwks, .JWT)

This indeed worked , the output is so:

USER>w newjwks
{"keys":[{"kty":"oct","k":"UkhjdlJ6b3JRQ1ZXVWx0aEpFeFdMRVEwVEhzMUt5ZzBTWDByZW1ZclJWST0","alg":"HS256"}]} 

USER>w JWT
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6InRlc3QtaWQtMTIzIiwidXNlcm5hbWUiOiJ0ZXN0LXVzZXJuYW1lIiwiZXhwIjoxNzIyMzI3MTUzLCJ0aW1lIjoxNzIyMzI2MjUzfQ.dEqq_RHJ_1GEjTLFaklNSfAAAZP9B_PgXbUD1aH2Vkk
USER>

Here, I do not understand why I had to remove the initial key and keep only {"kty":"oct","k":"UkhjdlJ6b3JRQ1ZXVWx0aEpFeFdMRVEwVEhzMUt5ZzBTWDByZW1ZclJWST0","alg":"HS256"} in newjwks.

Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer
Annonce
· Juil 30, 2024

[Vidéo] Prendre en charge la santé populationnelle et la prévention sur un territoire

Salut la Communauté!

Profitez de regarder la nouvelle vidéo sur la chaîne Youtube d'InterSystems France :

📺 Prendre en charge la santé populationnelle et la prévention sur un territoire

Intervenants : 
🗣 @Francois Le Floch, Ingénieur Solutions Internationales, InterSystems
🗣 @Florence Cureau, Solution Architect, InterSystems

Découvrez comment améliorer la santé d'un territoire et prévenir les risques afin d'agir en amont et fournir une prise en charge ciblée pour chaque patient. Apprenez les facteurs de succès en matière de responsabilité populationnelle et la manière dont InterSystems y contribue.

Abonnez-vous à notre chaîne youtube pour plus de vidéos et restez à l'écoute !

Discussion (0)0
Connectez-vous ou inscrivez-vous pour continuer
Annonce
· Juil 30, 2024

第17回インターシステムズ主催 開発者向けオンラインセミナー「InterSystems IRIS® サーバーとデータの守り方入門」のご案内

 

 

ご好評をいただいておりますインターシステムズ開発者向けオンラインセミナー、9月は以下のテーマで開催いたします。

 

テーマ「InterSystems IRIS® サーバーとデータの守り方入門」

日時:9月6日(金)13:30~14:00 (参加費無料・事前登録制)

ご登録はこちらから

[概要]

はじめはユートピアになると考えられていたサイバー空間にも多様な脅威が出現し、日々変化し続けています。

多くの分野で活用されている IRIS と IRIS for Health、より厳しいセキュリティ要件は避けられない未来とも言えるでしょう。

本セッションではIRISインスタンスと管理するデータを保護する方法について概要をご説明します。

[こんな方にお勧め]

IRISの管理機能に興味ある方
IRISを使用したソリューションを設計される方

ご多用中とは存じますが、皆様のご参加をお待ち申し上げております!

Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer
Annonce
· Juil 29, 2024

★投票開始!★ InterSystems Python プログラミングコンテスト 2024(USコミュニティ)

開発者の皆さん、こんにちは。

Pythonプログラミングコンテストの投票が始まりました!

🔥 ベストアプリケーションはこれだ! 🔥と思う作品に是非投票をお願します!

投票方法は以下の通りです。

Experts nomination:

インターシステムズの経験豊富な審査員がベストアプリを選び、Expert Nominationで賞品をノミネートします。

Community nomination:

開発者コミュニティのメンバーは、お好みのアプリケーションに対して1位~3位を指定しながら投票できます。

あなたの状況

順位
1位 2位 3位
開発者コミュニティに記事を掲載したり、OpenExchange(OEX)にアプリをアップロードしたことがある方 9点 6点 3点

開発者コミュニティに1つの記事を掲載した、または 1アプリケーションを OEX にアップロードしたことがある方

6点 4点 2点
開発者コミュニティへコメントや質問を投稿したことがある方 3点 2点 1点

 

エキスパートレベル

順位
1位 2位 3位
グローバルマスターズの VIP レベル または、InterSystems Product Managers 15点 10点 5点
グローバルマスターズの Ambassador レベル 12点 8点 4点

グローバルマスターズの Expert レベル または DC モデレーター

9点 6点 3点
グローバルマスターズの Specialist レベル 6点 4点 2点
グローバルマスターズの Advocate レベル または インターシステムズの従業員 3点 2点 1点

 

「ブラインド投票」とします

各応募作品への投票数は、誰にも分らないようになっています。1日1回、この記事のコメント欄に投票数を公開する予定です。

コンテストページの表示順は、コンテストに応募した時期が早ければ早いほど、上位に表示されます。

メモ:新しいコメントの通知を受けるために、この投稿を購読することをお忘れなく!(記事末尾の  ベルのアイコンをクリックするだけ!)

 

投票に参加するには

  1. Open Exchange へのサインインします(開発者コミュニティのアカウントを使用してください)。
  2. 投票ボタンは、開発者コミュニティ内で、質問/回答/記事の掲載/投稿に対するコメント など 記載いただいた方に対して有効になります。 ボタンが押せない場合は、コミュニティへのコメントやオリジナルの記事など、書き込みお願いします!詳細は、こちらの記事をご参照ください。
  3. 気が変わった場合は? - 選択をキャンセルして別のアプリケーションに投票できます。

ぜひ🔥これだ🔥と思う作品に投票お願いします!


メモ:コンテストへ応募された作品は、投票週間中にバグを修正したり、アプリケーションを改良したりすることができますので、アプリケーションのリリースを見逃さずに購読してください

Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer
Article
· Juil 29, 2024 2m de lecture

使用 GitLab 持续交付 InterSystems 解决方案 - 索引目录

转发自Eduard Lebedyu的原文

在本系列文章中,我将介绍并讨论使用 InterSystems 技术和 GitLab 进行软件开发的几种可行方法。我将涉及以下主题:

I在这一系列文章中,我介绍了持续交付的一般方法。这是一个极为广泛的话题,本系列文章应更多地被视为操作建议而非定论。如果你想实现应用程序的自动化构建、测试和交付,持续交付(尤其是 GitLab)将是你的不二之选。持续交付和容器允许你根据需要定制工作流程。

1 Comment
Discussion (1)1
Connectez-vous ou inscrivez-vous pour continuer