发布新帖

検索

摘要
· 一月 26

Nuevas publicaciones en la Comunidad de InterSystems, 19-25 enero

Artículos
#InterSystems IRIS
#InterSystems IRIS for Health
Anuncios
#InterSystems IRIS
Notas de la versión 0.10.5 de IPM
Por Jose-Tomas Salvador
#Otro
19-25 eneroWeek at a GlanceInterSystems Developer Community
摘要
· 一月 26

Publications des développeurs d'InterSystems, semaine Janvier 19 - 25, 2026, Résumé

Janvier 19 - 25, 2026Week at a GlanceInterSystems Developer Community
问题
· 一月 26

Professional Home Painting Services in Dubai

Professional home painting services in Dubai provide high-quality painting solutions designed to enhance the beauty and protection of residential properties. These services include interior and exterior painting, wall preparation, crack filling, primer application, and smooth finishing using premium, eco-friendly paints suitable for Dubai’s climate. Skilled painters ensure precise application and long-lasting results for apartments, villas, and townhouses.

Expert home painting services in Dubai focus on attention to detail, color consultation, and proper surface treatment to achieve a flawless and elegant finish. From single-room painting to complete home repainting, professional teams work efficiently while maintaining cleanliness and minimizing disruption to daily life. High-quality paintwork also helps protect walls from moisture, heat, and wear.

Choosing reliable home painting services in Dubai ensures improved aesthetics, increased property value, and durable paint finishes. With experienced painters, modern tools, and customer-focused service, professional home painting solutions deliver beautiful, long-lasting results tailored to residential needs.

讨论 (0)1
登录或注册以继续
公告
· 一月 26

Ayudad a dar forma al futuro del desarrollo en ObjectScript

Hola Comunidad,

Estamos emocionados de invitaros a participar en la creación de la próxima generación de herramientas de desarrollo para ObjectScript. Estamos trabajando en un asistente de codificación en ObjectScript potenciado por IA, diseñado específicamente para desarrolladores de IRIS. No es una IA genérica adaptada a ObjectScript, sino una solución construida desde cero para entender los modismos de ObjectScript, las APIs de IRIS, producciones de interoperabilidad y los flujos de trabajo reales de los desarrolladores.

Para asegurarnos de construir algo realmente útil, necesitamos vuestra opinión.

👉 Encuesta para desarrolladores del Agente de Codificación en ObjectScript 👈

La encuesta dura aproximadamente 5 minutos y abarca temas como:

  • Vuestro rol y nivel de experiencia
  • Puntos problemáticos y flujos de trabajo actuales
  • Qué características son más importantes (generación de código, depuración, soporte de aprendizaje y más)
  • Dónde y cómo os gustaría usar una herramienta así

La encuesta está abierta a desarrolladores de todos los niveles de experiencia en ObjectScript.

¿Qué sigue?

  • Se compartirán los resultados agregados con la comunidad
  • Los participantes interesados podrán recibir invitaciones a la beta temprana
  • Actualizaciones periódicas sobre el progreso a medida que avance el desarrollo

Vuestros comentarios influirán directamente en qué construimos primero y cómo funcionará.

Si tenéis preguntas, no dudéis en comentar abajo o contactad directamente a thomas.dyar@intersystems.com.

Gracias por ayudarnos a crear mejores herramientas para la comunidad de ObjectScript. ¡Esperamos con ganas vuestra participación!

讨论 (0)1
登录或注册以继续
文章
· 一月 26 阅读大约需 3 分钟

Générer un JWT sans accès au certificat/aux clés x509 du système

Pour générer un JWT à partir d'un certificat/clé X.509, toute opération (y compris la lecture) sur %SYS.X509Credentials requiert l'autorisation d'accès (U) à la ressource %Admin_Secure. Cette dernière est nécessaire car %SYS.X509Credentials est persistant ; cette implémentation vise à empêcher tout accès non autorisé aux clés privées.

Si la ressource %Admin_Secure n'est pas disponible lors de l'exécution, vous pouvez utiliser la solution de contournement suivante.

Lors de l'examen du code de génération des JWT, j'ai constaté que ce code utilise %SYS.X509Credentials uniquement comme source de données d'exécution pour PrivateKey, PrivateKeyPassword et Certificate. Pour contourner ce problème, vous pouvez utiliser une implémentation non persistante de l'interface X.509, exposant uniquement ces propriétés. Si vous utilisez l'interopérabilité, le certificat/clé privée peut être stocké dans les informations d'identification pour un accès sécurisé.

Class User.X509 Extends %RegisteredObject
{

Property PrivateKey As %VarString;
Property PrivateKeyPassword As %String;
Property Certificate As %VarString;
Property HasPrivateKey As %Boolean [ InitialExpression = {$$$YES} ];
ClassMethod GetX509() As User.X509
{
    set x509 = ..%New()
    set x509.PrivateKey = ..Key()
    set x509.Certificate = ..Cert()
    quit x509
}

/// Get X509 object from credential.
/// Username is a Cert, Password is a Private Key
ClassMethod GetX509FromCredential(credential) As User.X509
{
    set credentialObj = ##class(Ens.Config.Credentials).%OpenId(credential,,.sc)
    throw:$$$ISERR(sc) ##class(%Exception.StatusException).ThrowIfInterrupt(sc)
    
    set x509 = ..%New()
    set x509.PrivateKey = credentialObj.Password
    set x509.Certificate = credentialObj.Username
    quit x509
}

ClassMethod Key()
{
    q "-----BEGIN RSA PRIVATE KEY-----"_$C(13,10)
    _"YOUR_TEST_KEY"_$C(13,10)
    _"-----END RSA PRIVATE KEY-----"
}

ClassMethod Cert() As %VarString
{
    q "-----BEGIN CERTIFICATE-----"_$C(13,10)
    _"YOUR_TEST_CERT"_$C(13,10)
    _"-----END CERTIFICATE-----"
}

}

Vous pouvez générer un JWT de la manière suivante :

ClassMethod JWT() As %Status
{
    Set sc = $$$OK
    //Set x509 = ##class(%SYS.X509Credentials).GetByAlias("TempKeyPair")
    Set x509 = ##class(User.X509).GetX509()
    
    Set algorithm ="RS256"
    Set header = {"alg": (algorithm), "typ": "JWT"}
    Set claims= {"Key": "Value" }
    
    #; create JWK
    Set sc = ##class(%Net.JSON.JWK).CreateX509(algorithm,x509,.privateJWK)
    
    If $$$ISERR(sc) {
        Write $SYSTEM.OBJ.DisplayError(sc)
    }

    #; Create JWKS
    Set sc = ##class(%Net.JSON.JWKS).PutJWK(privateJWK,.privateJWKS)
    
    If $$$ISERR(sc) {
        Write $SYSTEM.OBJ.DisplayError(sc)
    }

    Set sc = ##Class(%Net.JSON.JWT).Create(header,,claims,privateJWKS,,.pJWT)
    
    If $$$ISERR(sc) {
        Write $SYSTEM.OBJ.DisplayError(sc)
    }
    
    Write pJWT
	Return sc
}

Vous pouvez également utiliser un objet dynamique pour éviter la création de classe ; dans ce cas, cela ressemblerait à ceci :

ClassMethod JWT(credential) As %Status
{
    Set sc = $$$OK
    //Set x509 = ##class(%SYS.X509Credentials).GetByAlias("TempKeyPair")
    Set credentialObj = ##class(Ens.Config.Credentials).%OpenId(credential,,.sc)
    throw:$$$ISERR(sc) ##class(%Exception.StatusException).ThrowIfInterrupt(sc)
    
    Set x509 = {
        "HasPrivateKey": true,
        "PrivateKey": (credentialObj.Password),
        "PrivateKeyPassword":"",
        "Certificate":(credentialObj.Username)
    }

    Set algorithm ="RS256"
    Set header = {"alg": (algorithm), "typ": "JWT"}
    Set claims= {"Key": "Value" }
    
    #; create JWK
    Set sc = ##class(%Net.JSON.JWK).CreateX509(algorithm,x509,.privateJWK)
    
    If $$$ISERR(sc) {
        Write $SYSTEM.OBJ.DisplayError(sc)
    }

    #; Create JWKS
    Set sc = ##class(%Net.JSON.JWKS).PutJWK(privateJWK,.privateJWKS)
    
    If $$$ISERR(sc) {
        Write $SYSTEM.OBJ.DisplayError(sc)
    }

    Set sc = ##Class(%Net.JSON.JWT).Create(header,,claims,privateJWKS,,.pJWT)
    
    If $$$ISERR(sc) {
        Write $SYSTEM.OBJ.DisplayError(sc)
    }
    
    Write pJWT
    Return sc
}
讨论 (0)1
登录或注册以继续