Memory Resolver Tutorial

    The basic configuration for the server requires:

    • The operator JWT
    • resolver set to MEMORY
    • resolver_preload set to an object where account public keys are mapped to account JWTs.

    Let’s create the setup:

    Output

    1. Generated operator key - private key stored "~/.nkeys/memory/memory.nk"
    2. Success! - added operator "memory"

    Add an account ‘A’

    1. nsc add account --name A

    Output

    1. Generated account key - private key stored "~/.nkeys/memory/accounts/A/A.nk"
    2. Success! - added account "A"

    Output

    1. ╭──────────────────────────────────────────────────────────────────────────────────────╮
    2. Account Details
    3. ├───────────────────────────┬──────────────────────────────────────────────────────────┤
    4. Name A
    5. Account ID ACSU3Q6LTLBVLGAQUONAGXJHVNWGSKKAUA7IY5TB4Z7PLEKSR5O6JTGR
    6. Issued 2019-04-30 20:21:34 UTC
    7. Expires
    8. ├───────────────────────────┼──────────────────────────────────────────────────────────┤
    9. Max Leaf Node Connections Unlimited
    10. Max Data Unlimited
    11. Max Exports Unlimited
    12. Max Imports Unlimited
    13. Max Msg Payload Unlimited
    14. Max Subscriptions Unlimited
    15. Exports Allows Wildcards True
    16. ├───────────────────────────┼──────────────────────────────────────────────────────────┤
    17. Imports None
    18. Exports None
    19. ╰───────────────────────────┴──────────────────────────────────────────────────────────╯

    Create a new user ‘TA’

    1. nsc add user --name TA

    Output

    1. Generated user key - private key stored "~/.nkeys/memory/accounts/A/users/TA.nk"
    2. Success! - added user "TA" to "A"

    The nsc tool can generate a configuration file automatically. You provide a path to the server configuration. The nsc tool will generate the server config for you:

    If you require additional settings, you may want to consider using in your main configuration, to reference the generated files. Otherwise, you can start a server and reference the generated configuration:

    1. nats-server -c /tmp/server.conf

    While generating a configuration file is easy, you may want to craft one by hand to know the details. With the entities created, and a standard location for the .nsc directory. You can reference the operator JWT and the account JWT in a server configuration or the JWT string directly. Remember that your configuration will be in $NSC_HOME/nats/<operator_name>/<operator_name>.jwt for the operator. The account JWT will be in $NSC_HOME/nats/<operator_name>/accounts/<account_name>/<account_name>.jwt

    For the configuration you’ll need:

    • The path to the operator JWT
    • A copy of the contents of the account JWT file

    The format of the file is:

    1. operator: <path to the operator jwt or jwt itself>
    2. resolver: MEMORY
    3. resolver_preload: {
    4. <public key for an account>: <contents of the account jwt>
    5. ### add as many accounts as you want
    6. ...
    7. }

    In this example this translates to:

    1. operator: /Users/synadia/.nsc/nats/memory/memory.jwt
    2. resolver: MEMORY
    3. resolver_preload: {
    4. ACSU3Q6LTLBVLGAQUONAGXJHVNWGSKKAUA7IY5TB4Z7PLEKSR5O6JTGR: eyJ0eXAiOiJqd3QiLCJhbGciOiJlZDI1NTE5In0.eyJqdGkiOiJPRFhJSVI2Wlg1Q1AzMlFJTFczWFBENEtTSDYzUFNNSEZHUkpaT05DR1RLVVBISlRLQ0JBIiwiaWF0IjoxNTU2NjU1Njk0LCJpc3MiOiJPRFdaSjJLQVBGNzZXT1dNUENKRjZCWTRRSVBMVFVJWTRKSUJMVTRLM1lERzNHSElXQlZXQkhVWiIsIm5hbWUiOiJBIiwic3ViIjoiQUNTVTNRNkxUTEJWTEdBUVVPTkFHWEpIVk5XR1NLS0FVQTdJWTVUQjRaN1BMRUtTUjVPNkpUR1IiLCJ0eXBlIjoiYWNjb3VudCIsIm5hdHMiOnsibGltaXRzIjp7InN1YnMiOi0xLCJjb25uIjotMSwibGVhZiI6LTEsImltcG9ydHMiOi0xLCJleHBvcnRzIjotMSwiZGF0YSI6LTEsInBheWxvYWQiOi0xLCJ3aWxkY2FyZHMiOnRydWV9fX0._WW5C1triCh8a4jhyBxEZZP8RJ17pINS8qLzz-01o6zbz1uZfTOJGvwSTS6Yv2_849B9iUXSd-8kp1iMXHdoBA
    5. }

    Save the config at server.conf and start the server:

    To test the configuration, simply use one of the standard tools:

    1. nats pub --creds ~/.nkeys/creds/memory/A/TA.creds hello world