Skip to content

Commit

Permalink
Improves README
Browse files Browse the repository at this point in the history
  • Loading branch information
andyquinterom committed Jan 2, 2024
1 parent f22f875 commit 2df69a4
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 30 deletions.
2 changes: 1 addition & 1 deletion DESCRIPTION
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Package: tapLock
Title: Seamless SSO for R applications
Version: 0.1.0.9000
Version: 0.1.0
Authors@R:
c(person(given = "ixpantia, SRL",
role = "cph",
Expand Down
88 changes: 59 additions & 29 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,55 +1,84 @@
# tapLock
# tapLock <img src="man/figures/tapLock.png" align="right" width=120 height=139 alt="" />

## Example Shiny App with Entra ID Authentication
Secure your R applications with OpenID Connect and OAuth 2.0.

```R
library(shiny)
library(tapLock)
## Summary

tapLock is an R library that provides a simple interface to
integrate OpenID Connect / OAuth 2.0 authentication into you Shiny
applications and Plumber APIs. tapLock uses a unique approach to
effectively secure your applications without the need to write almost
any code.

## Authentication providers

tapLock supports the following authentication providers:

- [Google](https://developers.google.com/identity/protocols/oauth2/openid-connect)
- [Microsoft Entra ID](https://www.microsoft.com/en-us/security/business/identity-access/microsoft-entra-id)

> If you need support for other providers, please contact us at
> [[email protected]](mailto:[email protected]). Or, if you are a
> developer, you can contribute to the project by adding support for
> additional providers.
## Security Model

tapLock is unique in its approach to securing Shiny applications and
Plumber APIs. tapLock utilizes middlewares that intercept all incoming
requests (both HTTP and WebSocket requests) and validates the
authentication token. This approach allows tapLock to be lean and
efficient since no expensive WebSocket connections are started until
the user is authenticated. It also prevents sensitive data in the UI
portion of the application from being exposed to unauthenticated users.

## How to use tapLock with Shiny

#### 1. Install tapLock

``` r
pak::pak("ixpantia/taplock")
```

#### 2. Create an authentication configuration

``` r
library(taplock)

auth_config <- new_openid_config(
provider = "entra_id",
# The following values are obtained from the authentication provider
tenant_id = Sys.getenv("TENANT_ID"),
client_id = Sys.getenv("CLIENT_ID"),
client_secret = Sys.getenv("CLIENT_SECRET"),
# This should be the URL of your application
app_url = Sys.getenv("APP_URL")
)
```

ui <- fluidPage(
tags$h1("tapLock example"),
textOutput("user")
)

server <- function(input, output, session) {
#### 3. Secure your Shiny application

output$user <- renderText({
given_name <- get_token_field(token(), "given_name")
family_name <- get_token_field(token(), "family_name")
expires_at <- expires_at(token())
glue::glue(
"Hello {given_name} {family_name}!",
"Your authenticated session will expire at {expires_at}.",
.sep = " "
)
})

}
```
To secure your Shiny Application you will simply need to expose
an `sso_shiny_app` instead of a regular `shinyApp` at the end of your
`app.R` file.

## Example Shiny App with Google Authentication
Here is an example of a Shiny application that uses tapLock to secure
itself:

```R
``` r
library(shiny)
library(tapLock)

auth_config <- new_openid_config(
provider = "google",
provider = "entra_id",
tenant_id = Sys.getenv("TENANT_ID"),
client_id = Sys.getenv("CLIENT_ID"),
client_secret = Sys.getenv("CLIENT_SECRET"),
app_url = Sys.getenv("APP_URL")
)

ui <- fluidPage(
tags$h1("tapLock example"),
tags$h1("r.sso example"),
textOutput("user")
)

Expand All @@ -67,5 +96,6 @@ server <- function(input, output, session) {
})

}
```

sso_shiny_app(auth_config, ui, server)
```
File renamed without changes
File renamed without changes

0 comments on commit 2df69a4

Please sign in to comment.