{
  "_id": "6adeae6fbf30f5f47f1a66c3",
  "Package": "shinyOAuth",
  "Title": "OIDC Authentication and OAuth Authorization for 'shiny'\nApplications",
  "Version": "0.6.1.9000",
  "Authors@R": "person(\"Luka\", \"Koning\", email = \"koningluka@gmail.com\", role = c(\"aut\", \"cre\", \"cph\"))",
  "Description": "Provides a simple, configurable framework for 'OpenID\nConnect' (OIDC) authentication and 'OAuth 2.0' authorization in\n'shiny' applications using 'S7' classes. Defines providers,\nclients, and tokens, as well as various supporting functions\nand a 'shiny' module. Features include cross-site request\nforgery (CSRF) protection, state encryption, 'Proof Key for\nCode Exchange' (PKCE) handling, validation of OIDC identity\ntokens (nonces, signatures, claims), automatic user info\nretrieval for OIDC and supported 'OAuth' providers,\nasynchronous flows, and hooks for audit logging.",
  "License": "MIT + file LICENSE",
  "Encoding": "UTF-8",
  "Roxygen": "list(markdown = TRUE)",
  "Config/testthat/edition": "3",
  "VignetteBuilder": "knitr",
  "URL": "https://github.com/lukakoning/shinyOAuth,\nhttps://lukakoning.github.io/shinyOAuth/",
  "BugReports": "https://github.com/lukakoning/shinyOAuth/issues",
  "Config/roxygen2/version": "8.1.0",
  "Config/pak/sysreqs": "cmake make libuv1-dev libssl-dev zlib1g-dev",
  "Repository": "https://lukakoning.r-universe.dev",
  "Date/Publication": "2026-10-25 23:04:05 UTC",
  "RemoteUrl": "https://github.com/lukakoning/shinyoauth",
  "RemoteRef": "HEAD",
  "RemoteSha": "c9a9b7bcd8a36e9ca82fb26fac6e18a2f9af3a71",
  "NeedsCompilation": "no",
  "Packaged": {
    "Date": "2026-10-26 01:30:25 UTC",
    "User": "root"
  },
  "Author": "Luka Koning [aut, cre, cph]",
  "Maintainer": "Luka Koning <koningluka@gmail.com>",
  "_user": "lukakoning",
  "_type": "src",
  "_file": "shinyOAuth_0.6.1.9000.tar.gz",
  "_fileid": "https://r2.ropensci.org/976738782a7c1b7a49c88f21c03183d6b112f2e84d198d00a30f1bcc46c55508",
  "_filesize": 2182398,
  "_sha256": "976738782a7c1b7a49c88f21c03183d6b112f2e84d198d00a30f1bcc46c55508",
  "_expires": "2027-02-03T01:35:41.000Z",
  "_created": "2026-10-26T01:30:25.000Z",
  "_published": "2026-10-26T01:35:43.215Z",
  "_upstream": "https://github.com/lukakoning/shinyoauth",
  "_status": "success",
  "_maintainer": {
    "name": "Luka Koning",
    "email": "koningluka@gmail.com",
    "login": "lukakoning",
    "description": "",
    "uuid": 102363211
  },
  "_jobs": [
    {
      "job": 121353665483,
      "time": 255,
      "config": "linux-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "12622157158"
    },
    {
      "job": 121353665406,
      "time": 233,
      "config": "linux-release-x86_64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "12621957745"
    },
    {
      "job": 121353665382,
      "time": 232,
      "config": "macos-oldrel-arm64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "12622052380"
    },
    {
      "job": 121353665392,
      "time": 160,
      "config": "macos-release-arm64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "12622216779"
    },
    {
      "job": 121352553334,
      "time": 266,
      "config": "source",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "12622066901"
    },
    {
      "job": 121353665428,
      "time": 129,
      "config": "wasm-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "12621254990"
    },
    {
      "job": 121353665399,
      "time": 246,
      "config": "windows-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "12621972928"
    },
    {
      "job": 121353665507,
      "time": 236,
      "config": "windows-oldrel-x86_64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "12622600204"
    },
    {
      "job": 121353665540,
      "time": 238,
      "config": "windows-release-x86_64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "12622206891"
    }
  ],
  "_buildurl": "https://github.com/r-universe/lukakoning/actions/runs/40254220155",
  "_commit": {
    "id": "c9a9b7bcd8a36e9ca82fb26fac6e18a2f9af3a71",
    "author": "lukakoning <koningluka@gmail.com>",
    "committer": "lukakoning <koningluka@gmail.com>",
    "message": " Fix base64url tests for stricter openssl decoding  (#25)\n",
    "time": 1792969445
  },
  "_distro": "resolute",
  "_host": "GitHub-Actions",
  "_registered": true,
  "_dependencies": [
    {
      "package": "R",
      "version": ">= 4.1.0",
      "role": "Depends"
    },
    {
      "package": "S7",
      "version": ">= 0.2.0",
      "role": "Imports"
    },
    {
      "package": "R6",
      "version": ">= 2.0",
      "role": "Imports"
    },
    {
      "package": "rlang",
      "version": ">= 1.0.0",
      "role": "Imports"
    },
    {
      "package": "shiny",
      "version": ">= 1.7.0",
      "role": "Imports"
    },
    {
      "package": "jsonlite",
      "version": ">= 1.6",
      "role": "Imports"
    },
    {
      "package": "openssl",
      "version": ">= 2.1.2",
      "role": "Imports"
    },
    {
      "package": "httr2",
      "version": ">= 1.1.0",
      "role": "Imports"
    },
    {
      "package": "curl",
      "role": "Imports"
    },
    {
      "package": "urltools",
      "version": ">= 1.7.3",
      "role": "Imports"
    },
    {
      "package": "cachem",
      "version": ">= 1.1.0",
      "role": "Imports"
    },
    {
      "package": "jose",
      "version": ">= 1.2.0",
      "role": "Imports"
    },
    {
      "package": "lifecycle",
      "version": ">= 1.0.0",
      "role": "Imports"
    },
    {
      "package": "cli",
      "version": ">= 3.0.0",
      "role": "Imports"
    },
    {
      "package": "htmltools",
      "version": ">= 0.5.0",
      "role": "Imports"
    },
    {
      "package": "otel",
      "version": ">= 0.2.0",
      "role": "Imports"
    },
    {
      "package": "bslib",
      "role": "Suggests"
    },
    {
      "package": "ggplot2",
      "role": "Suggests"
    },
    {
      "package": "purrr",
      "role": "Suggests"
    },
    {
      "package": "dplyr",
      "role": "Suggests"
    },
    {
      "package": "testthat",
      "version": ">= 3.2.2",
      "role": "Suggests"
    },
    {
      "package": "DT",
      "role": "Suggests"
    },
    {
      "package": "knitr",
      "role": "Suggests"
    },
    {
      "package": "rmarkdown",
      "role": "Suggests"
    },
    {
      "package": "webfakes",
      "role": "Suggests"
    },
    {
      "package": "promises",
      "version": ">= 1.3.3",
      "role": "Suggests"
    },
    {
      "package": "mirai",
      "version": ">= 2.5.1",
      "role": "Suggests"
    },
    {
      "package": "future",
      "role": "Suggests"
    },
    {
      "package": "withr",
      "role": "Suggests"
    },
    {
      "package": "later",
      "role": "Suggests"
    },
    {
      "package": "callr",
      "role": "Suggests"
    },
    {
      "package": "processx",
      "role": "Suggests"
    },
    {
      "package": "pkgload",
      "role": "Suggests"
    },
    {
      "package": "chromote",
      "role": "Suggests"
    },
    {
      "package": "httpuv",
      "role": "Suggests"
    },
    {
      "package": "sodium",
      "role": "Suggests"
    },
    {
      "package": "shinytest2",
      "role": "Suggests"
    },
    {
      "package": "xml2",
      "role": "Suggests"
    },
    {
      "package": "otelsdk",
      "role": "Suggests"
    }
  ],
  "_owner": "lukakoning",
  "_selfowned": true,
  "_usedby": 0,
  "_updates": [
    {
      "week": "2025-44",
      "n": 28
    },
    {
      "week": "2025-45",
      "n": 11
    },
    {
      "week": "2025-46",
      "n": 12
    },
    {
      "week": "2025-47",
      "n": 2
    },
    {
      "week": "2025-48",
      "n": 6
    },
    {
      "week": "2025-51",
      "n": 3
    },
    {
      "week": "2025-52",
      "n": 1
    },
    {
      "week": "2026-01",
      "n": 95
    },
    {
      "week": "2026-02",
      "n": 5
    },
    {
      "week": "2026-03",
      "n": 8
    },
    {
      "week": "2026-05",
      "n": 17
    },
    {
      "week": "2026-06",
      "n": 23
    },
    {
      "week": "2026-07",
      "n": 80
    },
    {
      "week": "2026-10",
      "n": 7
    },
    {
      "week": "2026-17",
      "n": 38
    },
    {
      "week": "2026-18",
      "n": 87
    },
    {
      "week": "2026-19",
      "n": 90
    },
    {
      "week": "2026-20",
      "n": 117
    },
    {
      "week": "2026-21",
      "n": 43
    },
    {
      "week": "2026-22",
      "n": 32
    },
    {
      "week": "2026-25",
      "n": 1
    },
    {
      "week": "2026-28",
      "n": 1
    },
    {
      "week": "2026-29",
      "n": 26
    },
    {
      "week": "2026-30",
      "n": 55
    },
    {
      "week": "2026-36",
      "n": 197
    },
    {
      "week": "2026-37",
      "n": 132
    },
    {
      "week": "2026-38",
      "n": 110
    },
    {
      "week": "2026-40",
      "n": 3
    },
    {
      "week": "2026-41",
      "n": 33
    },
    {
      "week": "2026-42",
      "n": 33
    },
    {
      "week": "2026-43",
      "n": 38
    }
  ],
  "_tags": [
    {
      "name": "v0.1.1",
      "date": "2025-11-04"
    },
    {
      "name": "v0.1.3",
      "date": "2025-11-10"
    },
    {
      "name": "v0.1.4",
      "date": "2025-11-24"
    },
    {
      "name": "v0.2.0",
      "date": "2026-01-12"
    },
    {
      "name": "v0.3.0",
      "date": "2026-01-30"
    },
    {
      "name": "v0.4.0",
      "date": "2026-02-14"
    },
    {
      "name": "v0.5.0",
      "date": "2026-05-23"
    },
    {
      "name": "v0.6.0",
      "date": "2026-09-17"
    },
    {
      "name": "v0.6.1",
      "date": "2026-09-17"
    }
  ],
  "_stars": 29,
  "_contributors": [
    {
      "user": "lukakoning",
      "count": 1341,
      "uuid": 102363211
    },
    {
      "user": "t-kalinowski",
      "count": 1,
      "uuid": 8462255
    }
  ],
  "_userbio": {
    "uuid": 102363211,
    "type": "user",
    "name": "lukakoning",
    "followers": 6
  },
  "_downloads": {
    "count": 626,
    "source": "https://cranlogs.r-pkg.org/downloads/total/last-month/shinyOAuth"
  },
  "_devurl": "https://github.com/lukakoning/shinyoauth",
  "_pkgdown": "https://lukakoning.github.io/shinyOAuth/",
  "_searchresults": 29,
  "_rbuild": "4.6.1",
  "_assets": [
    "extra/citation.cff",
    "extra/citation.html",
    "extra/citation.json",
    "extra/citation.txt",
    "extra/contents.json",
    "extra/manual.pdf",
    "extra/NEWS.html",
    "extra/NEWS.txt",
    "extra/readme.html",
    "extra/readme.md",
    "extra/shinyOAuth.html",
    "LICENSE"
  ],
  "_homeurl": "https://github.com/lukakoning/shinyoauth",
  "_realowner": "lukakoning",
  "_cranurl": true,
  "_releases": [
    {
      "version": "0.1.1",
      "date": "2025-11-09"
    },
    {
      "version": "0.1.3",
      "date": "2025-11-10"
    },
    {
      "version": "0.1.4",
      "date": "2025-11-24"
    },
    {
      "version": "0.2.0",
      "date": "2026-01-13"
    },
    {
      "version": "0.3.0",
      "date": "2026-01-30"
    },
    {
      "version": "0.4.0",
      "date": "2026-02-16"
    },
    {
      "version": "0.5.0",
      "date": "2026-05-23"
    },
    {
      "version": "0.6.0",
      "date": "2026-09-17"
    },
    {
      "version": "0.6.1",
      "date": "2026-09-18"
    }
  ],
  "_exports": [
    "check_oauth21",
    "client_bearer_req",
    "custom_cache",
    "error_on_softened",
    "get_userinfo",
    "handle_callback",
    "introspect_token",
    "is_ok_host",
    "oauth_account_owner",
    "oauth_browser_owner",
    "oauth_client",
    "oauth_client_mtls_registration",
    "oauth_client_secret_apple",
    "oauth_connection",
    "oauth_connection_store_memory",
    "oauth_connections",
    "oauth_connections_server",
    "oauth_connections_ui",
    "oauth_form_post_ui",
    "oauth_module_server",
    "oauth_provider",
    "oauth_provider_apple",
    "oauth_provider_auth0",
    "oauth_provider_authentik",
    "oauth_provider_cognito",
    "oauth_provider_github",
    "oauth_provider_gitlab",
    "oauth_provider_globus",
    "oauth_provider_google",
    "oauth_provider_huggingface",
    "oauth_provider_keycloak",
    "oauth_provider_microsoft",
    "oauth_provider_oidc",
    "oauth_provider_oidc_discover",
    "oauth_provider_okta",
    "oauth_provider_orcid",
    "oauth_provider_slack",
    "oauth_provider_spotify",
    "oauth_provider_surfconext",
    "oauth_ui",
    "OAuthClient",
    "OAuthProvider",
    "OAuthToken",
    "perform_client_bearer_req",
    "perform_resource_req",
    "prepare_authorization_request",
    "prepare_call",
    "refresh_token",
    "resource_req",
    "revoke_token",
    "smart_client",
    "smart_context",
    "smart_discover",
    "smart_fhir_user",
    "smart_launch_route",
    "smart_patient",
    "use_shinyOAuth"
  ],
  "_help": [
    {
      "page": "check_oauth21",
      "title": "Assess an OAuth configuration against a pinned OAuth 2.1 draft",
      "topics": [
        "check_oauth21"
      ]
    },
    {
      "page": "client_bearer_req",
      "title": "Alias for 'resource_req()'",
      "topics": [
        "client_bearer_req"
      ]
    },
    {
      "page": "custom_cache",
      "title": "Create a custom state store or signing-key cache",
      "topics": [
        "custom_cache"
      ]
    },
    {
      "page": "get_userinfo",
      "title": "Fetch a user's profile (UserInfo)",
      "topics": [
        "get_userinfo"
      ]
    },
    {
      "page": "handle_callback",
      "title": "Handle OAuth 2.0 callback: verify state, swap code for token, verify token",
      "topics": [
        "handle_callback"
      ]
    },
    {
      "page": "introspect_token",
      "title": "Introspect an OAuth 2.0 token",
      "topics": [
        "introspect_token"
      ]
    },
    {
      "page": "is_ok_host",
      "title": "Check a URL against the package's host policy",
      "topics": [
        "is_ok_host"
      ]
    },
    {
      "page": "oauth_browser_owner",
      "title": "Configure ownership of retained OAuth connections",
      "topics": [
        "oauth_account_owner",
        "oauth_browser_owner",
        "print.OAuthOwnerPolicy"
      ]
    },
    {
      "page": "oauth_client",
      "title": "Configure OAuth/OIDC client credentials and login settings",
      "topics": [
        "oauth_client"
      ]
    },
    {
      "page": "oauth_client_mtls_registration",
      "title": "Prepare client-certificate registration settings (mTLS)",
      "topics": [
        "oauth_client_mtls_registration"
      ]
    },
    {
      "page": "oauth_client_secret_apple",
      "title": "Create a client secret for Sign in with Apple",
      "topics": [
        "oauth_client_secret_apple"
      ]
    },
    {
      "page": "oauth_connection",
      "title": "Make API requests with a Shiny session's current OAuth credentials",
      "topics": [
        "oauth_connection"
      ]
    },
    {
      "page": "oauth_connection_store_memory",
      "title": "Create a process-local store for retained OAuth connections",
      "topics": [
        "oauth_connection_store_memory",
        "print.OAuthConnectionStore"
      ]
    },
    {
      "page": "oauth_connections",
      "title": "Configure several independently managed OAuth connections",
      "topics": [
        "oauth_connections",
        "print.OAuthConnections"
      ]
    },
    {
      "page": "oauth_connections_server",
      "title": "Connect, restore and use several OAuth authorizations in a Shiny session",
      "topics": [
        "oauth_connections_server"
      ]
    },
    {
      "page": "oauth_connections_ui",
      "title": "Handle callbacks and establish the connection owner's browser session",
      "topics": [
        "oauth_connections_ui"
      ]
    },
    {
      "page": "oauth_form_post_ui",
      "title": "Wrap a Shiny UI to enable OAuth 2.0/OIDC form_post callbacks",
      "topics": [
        "oauth_form_post_ui"
      ]
    },
    {
      "page": "oauth_module_server",
      "title": "OAuth 2.0 authorization and OIDC authentication module for Shiny",
      "topics": [
        "oauth_module_server"
      ]
    },
    {
      "page": "oauth_provider",
      "title": "Configure OAuth/OIDC provider endpoints and validation settings",
      "topics": [
        "oauth_provider"
      ]
    },
    {
      "page": "oauth_provider_apple",
      "title": "Create an Apple OAuthProvider",
      "topics": [
        "oauth_provider_apple"
      ]
    },
    {
      "page": "oauth_provider_auth0",
      "title": "Create an Auth0 OAuthProvider (via OIDC discovery)",
      "topics": [
        "oauth_provider_auth0"
      ]
    },
    {
      "page": "oauth_provider_authentik",
      "title": "Create an authentik OAuthProvider (via OIDC discovery)",
      "topics": [
        "oauth_provider_authentik"
      ]
    },
    {
      "page": "oauth_provider_cognito",
      "title": "Create an Amazon Cognito OAuthProvider (via OIDC discovery)",
      "topics": [
        "oauth_provider_cognito"
      ]
    },
    {
      "page": "oauth_provider_github",
      "title": "Create a GitHub OAuthProvider",
      "topics": [
        "oauth_provider_github"
      ]
    },
    {
      "page": "oauth_provider_gitlab",
      "title": "Create a GitLab OAuthProvider (via OIDC discovery)",
      "topics": [
        "oauth_provider_gitlab"
      ]
    },
    {
      "page": "oauth_provider_globus",
      "title": "Create a Globus Auth OAuthProvider",
      "topics": [
        "oauth_provider_globus"
      ]
    },
    {
      "page": "oauth_provider_google",
      "title": "Create a Google OAuthProvider",
      "topics": [
        "oauth_provider_google"
      ]
    },
    {
      "page": "oauth_provider_huggingface",
      "title": "Create a Hugging Face OAuthProvider (via OIDC discovery)",
      "topics": [
        "oauth_provider_huggingface"
      ]
    },
    {
      "page": "oauth_provider_keycloak",
      "title": "Create a Keycloak OAuthProvider (via OIDC discovery)",
      "topics": [
        "oauth_provider_keycloak"
      ]
    },
    {
      "page": "oauth_provider_microsoft",
      "title": "Create a Microsoft (Entra ID) OAuthProvider",
      "topics": [
        "oauth_provider_microsoft"
      ]
    },
    {
      "page": "oauth_provider_oidc",
      "title": "Create a generic OpenID Connect (OIDC) OAuthProvider",
      "topics": [
        "oauth_provider_oidc"
      ]
    },
    {
      "page": "oauth_provider_oidc_discover",
      "title": "Discover and create an OpenID Connect (OIDC) OAuthProvider",
      "topics": [
        "oauth_provider_oidc_discover"
      ]
    },
    {
      "page": "oauth_provider_okta",
      "title": "Create an Okta OAuthProvider (via OIDC discovery)",
      "topics": [
        "oauth_provider_okta"
      ]
    },
    {
      "page": "oauth_provider_orcid",
      "title": "Create an ORCID OAuthProvider (via OIDC discovery)",
      "topics": [
        "oauth_provider_orcid"
      ]
    },
    {
      "page": "oauth_provider_slack",
      "title": "Create a Slack OAuthProvider (via OIDC discovery)",
      "topics": [
        "oauth_provider_slack"
      ]
    },
    {
      "page": "oauth_provider_spotify",
      "title": "Create a Spotify OAuthProvider",
      "topics": [
        "oauth_provider_spotify"
      ]
    },
    {
      "page": "oauth_provider_surfconext",
      "title": "Create a SURFconext OAuthProvider (via OIDC discovery)",
      "topics": [
        "oauth_provider_surfconext"
      ]
    },
    {
      "page": "oauth_ui",
      "title": "Set up a Shiny UI for shinyOAuth",
      "topics": [
        "oauth_ui"
      ]
    },
    {
      "page": "OAuthClient",
      "title": "OAuthClient S7 class",
      "topics": [
        "OAuthClient"
      ]
    },
    {
      "page": "OAuthConnection",
      "title": "OAuthConnection R6 class",
      "topics": [
        "OAuthConnection"
      ]
    },
    {
      "page": "OAuthProvider",
      "title": "OAuthProvider S7 class",
      "topics": [
        "OAuthProvider"
      ]
    },
    {
      "page": "OAuthToken",
      "title": "OAuthToken S7 class",
      "topics": [
        "OAuthToken"
      ]
    },
    {
      "page": "perform_client_bearer_req",
      "title": "Alias for 'perform_resource_req()'",
      "topics": [
        "perform_client_bearer_req"
      ]
    },
    {
      "page": "perform_resource_req",
      "title": "Call an API with an access token",
      "topics": [
        "perform_resource_req"
      ]
    },
    {
      "page": "prepare_authorization_request",
      "title": "Prepare a browser authorization request using GET or POST",
      "topics": [
        "prepare_authorization_request"
      ]
    },
    {
      "page": "prepare_call",
      "title": "Prepare an OAuth 2.0 authorization request and build its URL",
      "topics": [
        "prepare_call"
      ]
    },
    {
      "page": "refresh_token",
      "title": "Refresh an OAuth 2.0 token",
      "topics": [
        "refresh_token"
      ]
    },
    {
      "page": "resource_req",
      "title": "Prepare an API request with an access token",
      "topics": [
        "resource_req"
      ]
    },
    {
      "page": "revoke_token",
      "title": "Revoke an OAuth 2.0 token",
      "topics": [
        "revoke_token"
      ]
    },
    {
      "page": "smart_client",
      "title": "Configure a SMART on FHIR app registration",
      "topics": [
        "smart_client"
      ]
    },
    {
      "page": "smart_context",
      "title": "Read a connection's current SMART context",
      "topics": [
        "smart_context",
        "smart_fhir_user",
        "smart_patient"
      ]
    },
    {
      "page": "smart_discover",
      "title": "Discover SMART on FHIR server metadata",
      "topics": [
        "smart_discover"
      ]
    },
    {
      "page": "smart_launch_route",
      "title": "Register a SMART EHR launch entry route",
      "topics": [
        "smart_launch_route"
      ]
    },
    {
      "page": "use_shinyOAuth",
      "title": "Add JavaScript dependency to the UI of a Shiny app",
      "topics": [
        "use_shinyOAuth"
      ]
    }
  ],
  "_readme": "https://github.com/lukakoning/shinyoauth/raw/HEAD/README.md",
  "_rundeps": [
    "askpass",
    "base64enc",
    "bslib",
    "cachem",
    "cli",
    "commonmark",
    "curl",
    "digest",
    "fastmap",
    "fontawesome",
    "fs",
    "glue",
    "htmltools",
    "httpuv",
    "httr2",
    "jose",
    "jquerylib",
    "jsonlite",
    "later",
    "lifecycle",
    "magrittr",
    "memoise",
    "mime",
    "openssl",
    "otel",
    "promises",
    "R6",
    "rappdirs",
    "Rcpp",
    "rlang",
    "S7",
    "sass",
    "shiny",
    "sourcetools",
    "sys",
    "triebeard",
    "urltools",
    "vctrs",
    "withr",
    "xtable"
  ],
  "_vignettes": [
    {
      "source": "advanced-security.Rmd",
      "filename": "advanced-security.html",
      "title": "Advanced security configuration",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Overview",
        "Browser binding and deployment boundary",
        "Provider metadata and OIDC discovery",
        "JWT client authentication",
        "Issuer comparison and transport policy",
        "Callback pages and application scripts",
        "Provider key-set validation",
        "Trusted ID-token audiences",
        "Mutual TLS (mTLS)",
        "JWT-secured authorization request (JAR)",
        "Request Objects published by the Shiny app",
        "Pushed authorization requests (PAR)",
        "Form Post response mode",
        "Deployment behind an HTTPS proxy",
        "JWT-secured authorization response mode (JARM)",
        "Demonstrating proof-of-possession (DPoP)",
        "Token binding requirements and validation",
        "DPoP in API requests",
        "Signature and encryption support"
      ],
      "created": "2026-05-28 20:09:04",
      "modified": "2026-10-24 15:17:50",
      "commits": 43
    },
    {
      "source": "audit-logging.Rmd",
      "filename": "audit-logging.html",
      "title": "Audit logging and hooks",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Overview",
        "Receiving audit events",
        "Authentication outcomes",
        "Event structure",
        "HTTP context and redaction",
        "Audit events from asynchronous workers",
        "Digest keys across R processes",
        "Event catalog",
        "Authorization redirect issuance",
        "Event: audit_redirect_issued",
        "Callback query rejected",
        "Event: audit_callback_query_rejected",
        "Callback routing rejected",
        "Event: audit_callback_routing_rejected",
        "Callback issuer validation",
        "Event: audit_callback_iss_missing",
        "Event: audit_callback_iss_mismatch",
        "Event: audit_callback_iss_validation_failed",
        "Callback received",
        "Event: audit_callback_received",
        "Callback validation",
        "Event: audit_callback_validation_success",
        "Event: audit_callback_validation_failed",
        "State store access",
        "Event: audit_state_store_lookup_failed",
        "Event: audit_state_store_removal_failed",
        "Token exchange",
        "Event: audit_token_exchange",
        "Event: audit_token_exchange_error",
        "Token introspection",
        "Event: audit_token_introspection",
        "Login result",
        "Event: audit_login_success",
        "Event: audit_login_failed",
        "Logout and session clears",
        "Event: audit_logout",
        "Event: audit_connection_disconnected",
        "Event: audit_connections_disconnected",
        "Event: audit_session_cleared",
        "Token revocation",
        "Event: audit_token_revocation",
        "Refresh failures while keeping the session (indefinite sessions)",
        "Event: audit_refresh_failed_but_kept_session",
        "Browser cookie/WebCrypto error",
        "Event: audit_browser_cookie_error",
        "Invalid browser token",
        "Event: audit_invalid_browser_token",
        "Token refresh",
        "Event: audit_token_refresh",
        "Userinfo fetch",
        "Event: audit_userinfo",
        "State parsing failures",
        "Event: audit_state_parse_failure",
        "Error response state consumption",
        "Event: audit_error_state_consumed",
        "Event: audit_error_state_consumption_failed",
        "Module/session lifecycle",
        "Event: audit_session_started",
        "Event: audit_session_ended",
        "Event: audit_session_ended_revoke",
        "Authentication state changes",
        "Event: audit_authenticated_changed",
        "Error events",
        "Event: error",
        "Event: http_error",
        "Event: transport_error"
      ],
      "created": "2025-10-27 18:25:53",
      "modified": "2026-09-29 19:34:21",
      "commits": 45
    },
    {
      "source": "authentication-flow.Rmd",
      "filename": "authentication-flow.html",
      "title": "Authentication flow",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Overview",
        "What happens during the authentication flow?",
        "1. First page load: set a browser token",
        "2. Decide whether to start login",
        "3. Build the authorization request",
        "State storage and expiry",
        "Signed and pushed authorization requests (JAR and PAR)",
        "4. Redirect the browser to the provider",
        "5. User signs in and authorizes access",
        "6. Provider returns the browser to the app",
        "HTTP POST callbacks (form_post)",
        "Signed authorization responses (JARM)",
        "7. Validate the callback and login state",
        "Browser binding and account validation",
        "Multiple authorization servers",
        "8. Exchange the authorization code for tokens",
        "Client certificates and certificate-bound tokens (mTLS)",
        "Tokens bound to a signing key (DPoP)",
        "9. Validate the ID token (OIDC)",
        "Signature and claim checks",
        "Requested claims and authentication context (ACR)",
        "10. Build the OAuthToken object",
        "11. Check whether the token is active (optional introspection)",
        "12. Fetch user information (optional)",
        "Signed UserInfo responses",
        "UserInfo with mTLS or DPoP",
        "13. Mark the session as authenticated",
        "14. Clean up the callback URL and browser state",
        "15. Manage the authenticated session",
        "Token refresh",
        "ID tokens during refresh",
        "Refreshing mTLS and DPoP tokens",
        "Reauthentication",
        "Expiry and refresh failures",
        "16. Logout and token revocation"
      ],
      "created": "2025-10-27 18:25:53",
      "modified": "2026-10-18 10:22:30",
      "commits": 84
    },
    {
      "source": "example-spotify.Rmd",
      "filename": "example-spotify.html",
      "title": "Example: Spotify login to display listening data",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Overview",
        "Spotify app registration",
        "Shiny app example",
        "API requests and scopes",
        "Full dashboard example"
      ],
      "created": "2025-10-27 18:25:53",
      "modified": "2026-10-16 20:37:54",
      "commits": 20
    },
    {
      "source": "external-integrations.Rmd",
      "filename": "external-integrations.html",
      "title": "External SDKs and database drivers",
      "engine": "knitr::rmarkdown",
      "headings": [
        "A single-authorization app",
        "SDK callbacks and databases",
        "Refresh, async work and recovery",
        "Several authorizations and optional UserInfo",
        "Background tasks and result ownership"
      ],
      "created": "2026-09-29 19:34:21",
      "modified": "2026-09-29 19:34:21",
      "commits": 1
    },
    {
      "source": "multiple-authorizations.Rmd",
      "filename": "multiple-authorizations.html",
      "title": "Keep and use multiple OAuth authorizations",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Client configuration and connections",
        "Register two clients",
        "1. Configure clients outside server()",
        "2. Keep authorizations when the browser returns",
        "3. Select a connection and make a request",
        "Requests, permissions and refresh",
        "Keep an ordinary OIDC login alongside SMART connections"
      ],
      "created": "2026-09-14 21:11:56",
      "modified": "2026-10-05 20:14:31",
      "commits": 7
    },
    {
      "source": "opentelemetry.Rmd",
      "filename": "opentelemetry.html",
      "title": "OpenTelemetry logs and traces",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Overview",
        "Exporter configuration",
        "Traces and event correlation",
        "Logging and tracing options",
        "Asynchronous workers",
        "Error attributes and redaction",
        "Authorization metadata privacy",
        "Span catalog",
        "Span: shinyOAuth.module.init",
        "Span: shinyOAuth.login.request",
        "Span: shinyOAuth.login.par",
        "Span: shinyOAuth.login.par.http",
        "Span: shinyOAuth.callback",
        "Span: shinyOAuth.form_post",
        "Span: shinyOAuth.form_post.bridge",
        "Span: shinyOAuth.callback.validate",
        "Span: shinyOAuth.callback.worker",
        "Span: shinyOAuth.token.exchange",
        "Span: shinyOAuth.token.exchange.http",
        "Span: shinyOAuth.token.verify",
        "Span: shinyOAuth.userinfo",
        "Span: shinyOAuth.userinfo.http",
        "Span: shinyOAuth.refresh",
        "Span: shinyOAuth.refresh.worker",
        "Span: shinyOAuth.logout",
        "Span: shinyOAuth.session.end.revoke",
        "Span: shinyOAuth.token.revoke",
        "Span: shinyOAuth.token.revoke.http",
        "Span: shinyOAuth.token.revoke.worker",
        "Span: shinyOAuth.token.introspect",
        "Span: shinyOAuth.token.introspect.http",
        "Span: shinyOAuth.token.introspect.worker"
      ],
      "created": "2026-04-25 14:04:58",
      "modified": "2026-10-19 21:52:45",
      "commits": 21
    },
    {
      "source": "package-options.Rmd",
      "filename": "package-options.html",
      "title": "Package options reference",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Logging",
        "Validation and URL policy",
        "Advanced parameter overrides",
        "Async timeout (mirai)",
        "Async condition replay",
        "Token lifetime fallback",
        "HTTP settings (timeout, retries, user agent)",
        "State store",
        "Size caps",
        "State envelope",
        "Callback query",
        "Local debugging"
      ],
      "created": "2026-09-05 14:00:16",
      "modified": "2026-10-22 20:11:52",
      "commits": 25
    },
    {
      "source": "token-targets.Rmd",
      "filename": "token-targets.html",
      "title": "Several API tokens from one authorization",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Declare calendar and contacts targets",
        "Use the same connection interface in either module",
        "Microsoft configuration"
      ],
      "created": "2026-09-29 19:34:21",
      "modified": "2026-09-29 19:34:21",
      "commits": 1
    },
    {
      "source": "usage.Rmd",
      "filename": "usage.html",
      "title": "Usage",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Overview",
        "GitHub app registration",
        "Minimal Shiny module example",
        "Provider, client, and token objects",
        "Authentication state and user information",
        "Manual login and logout buttons",
        "Authenticated API requests",
        "Additional token response fields",
        "Provider configuration and OIDC discovery",
        "Assessing OAuth 2.1 configuration",
        "Multiple authorization servers",
        "Requests bound to a client and resource",
        "Asynchronous execution",
        "Token expiry and session length",
        "Deployment",
        "Posit Connect and Connect Cloud",
        "Multiple R processes",
        "Security checklist",
        "Troubleshooting",
        "Further configuration"
      ],
      "created": "2025-10-27 18:25:53",
      "modified": "2026-10-22 20:11:52",
      "commits": 109
    },
    {
      "source": "smart-on-fhir.Rmd",
      "filename": "smart-on-fhir.html",
      "title": "Use SMART on FHIR from Shiny",
      "engine": "knitr::rmarkdown",
      "headings": [
        "FHIR and SMART on FHIR",
        "Before running the example",
        "1. Discover the server and configure the client",
        "2. Configure retained connections",
        "3. Authorize and fetch the patient",
        "Search with the same connection",
        "Patient context and user identity are different",
        "Start from an EHR instead",
        "More than one hospital",
        "Other registration and refresh options"
      ],
      "created": "2026-09-14 21:11:56",
      "modified": "2026-09-19 12:39:43",
      "commits": 7
    }
  ],
  "_score": 8.156520379126428,
  "_indexed": true,
  "_nocasepkg": "shinyoauth",
  "_universes": [
    "lukakoning"
  ],
  "_binaries": [
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.6.1.9000",
      "date": "2026-10-26T01:33:21.000Z",
      "distro": "resolute",
      "commit": "c9a9b7bcd8a36e9ca82fb26fac6e18a2f9af3a71",
      "fileid": "https://r2.ropensci.org/316dae7b8cdfce64b589ea7d31874f7fd848ca58befcaa43582da553309160e6",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/lukakoning/actions/runs/40254220155"
    },
    {
      "r": "4.6.1",
      "os": "linux",
      "version": "0.6.1.9000",
      "date": "2026-10-26T01:33:16.000Z",
      "distro": "resolute",
      "commit": "c9a9b7bcd8a36e9ca82fb26fac6e18a2f9af3a71",
      "fileid": "https://r2.ropensci.org/6155b73e87fa9f413ea2e8161392aa40bd65888fab21bf0c9d0e20551d82e4e7",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/lukakoning/actions/runs/40254220155"
    },
    {
      "r": "4.5.3",
      "os": "mac",
      "version": "0.6.1.9000",
      "date": "2026-10-26T01:32:51.000Z",
      "commit": "c9a9b7bcd8a36e9ca82fb26fac6e18a2f9af3a71",
      "fileid": "https://r2.ropensci.org/e4607f5beca6e9cd4fa2cab056318b84ba0e6160c8fb7ef7e7c8417cacaaa491",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/lukakoning/actions/runs/40254220155"
    },
    {
      "r": "4.6.1",
      "os": "mac",
      "version": "0.6.1.9000",
      "date": "2026-10-26T01:32:19.000Z",
      "commit": "c9a9b7bcd8a36e9ca82fb26fac6e18a2f9af3a71",
      "fileid": "https://r2.ropensci.org/eccd3d9bd58191eaaeb5c0628c98f992f506002679ffdd43d6514208f6d78196",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/lukakoning/actions/runs/40254220155"
    },
    {
      "r": "4.6.0",
      "os": "wasm",
      "version": "0.6.1.9000",
      "date": "2026-10-26T01:33:13.000Z",
      "commit": "c9a9b7bcd8a36e9ca82fb26fac6e18a2f9af3a71",
      "fileid": "https://r2.ropensci.org/eeb47423ddb0c2d803fe68ff5a0905313f7c3113817df07b9e812154e5f02504",
      "status": "success",
      "buildurl": "https://github.com/r-universe/lukakoning/actions/runs/40254220155"
    },
    {
      "r": "4.7.0",
      "os": "win",
      "version": "0.6.1.9000",
      "date": "2026-10-26T01:32:00.000Z",
      "commit": "c9a9b7bcd8a36e9ca82fb26fac6e18a2f9af3a71",
      "fileid": "https://r2.ropensci.org/4b886fbffee7f36bc757ea6c24f69d971c4623fae3469d3899d4c3118aaa725d",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/lukakoning/actions/runs/40254220155"
    },
    {
      "r": "4.5.3",
      "os": "win",
      "version": "0.6.1.9000",
      "date": "2026-10-26T01:32:04.000Z",
      "commit": "c9a9b7bcd8a36e9ca82fb26fac6e18a2f9af3a71",
      "fileid": "https://r2.ropensci.org/0d706aaa273f02b227b4540673cba7cd3a42e2f4f2ee88a9d245af1755ce77d4",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/lukakoning/actions/runs/40254220155"
    },
    {
      "r": "4.6.1",
      "os": "win",
      "version": "0.6.1.9000",
      "date": "2026-10-26T01:32:02.000Z",
      "commit": "c9a9b7bcd8a36e9ca82fb26fac6e18a2f9af3a71",
      "fileid": "https://r2.ropensci.org/0852d1cd7010fc09509cadccaca03e13a1ee6fcb3429d8c90d4467c79cbcba47",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/lukakoning/actions/runs/40254220155"
    }
  ]
}