ms-auth-0.2.0.0: Microsoft Authentication API
Safe HaskellSafe-Inferred
LanguageHaskell2010

Network.OAuth2.Session

Description

MS Identity user session based on OAuth tokens

The library supports the following authentication scenarios :

and provides functions to keep tokens up to date in the background.

Synopsis

App-only flow

type Token t = TVar (Maybe t) Source #

App has (at most) one token at a time

expireToken :: MonadIO m => Token t -> m () Source #

readToken :: MonadIO m => Token t -> m (Maybe t) Source #

fetchUpdateToken Source #

Arguments

:: MonadIO m 
=> IdpApplication 'ClientCredentials AzureAD 
-> Token OAuth2Token

token TVar

-> Manager 
-> m () 

Fetch an OAuth token and keep it updated. Should be called as a first thing in the app

NB : forks a thread in the background

https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-client-creds-grant-flow

Auth code grant flow

OAuth endpoints

loginEndpoint Source #

Arguments

:: MonadIO m 
=> IdpApplication 'AuthorizationCode AzureAD 
-> RoutePattern

e.g. "/login"

-> Scotty m () 

Login endpoint

see azureADApp

replyEndpoint Source #

Arguments

:: MonadIO m 
=> IdpApplication 'AuthorizationCode AzureAD 
-> Tokens UserSub OAuth2Token

token TVar

-> Manager 
-> RoutePattern

e.g. "/oauth/reply"

-> Scotty m () 

The identity provider redirects the client to the reply endpoint as part of the OAuth flow : https://learn.microsoft.com/en-us/graph/auth-v2-user?view=graph-rest-1.0&tabs=http#authorization-response

NB : forks a thread per logged in user to keep their tokens up to date

In-memory user session

type Tokens uid t = TVar (TokensData uid t) Source #

transactional token store

newTokens :: (MonadIO m, Ord uid) => m (Tokens uid t) Source #

Create an empty Tokens object

data UserSub Source #

sub field

Instances

Instances details
FromJSON UserSub Source # 
Instance details

Defined in Network.OAuth2.JWT

FromJSONKey UserSub Source # 
Instance details

Defined in Network.OAuth2.JWT

ToJSON UserSub Source # 
Instance details

Defined in Network.OAuth2.JWT

ToJSONKey UserSub Source # 
Instance details

Defined in Network.OAuth2.JWT

IsString UserSub Source # 
Instance details

Defined in Network.OAuth2.JWT

Methods

fromString :: String -> UserSub #

Generic UserSub Source # 
Instance details

Defined in Network.OAuth2.JWT

Associated Types

type Rep UserSub :: Type -> Type #

Methods

from :: UserSub -> Rep UserSub x #

to :: Rep UserSub x -> UserSub #

Show UserSub Source # 
Instance details

Defined in Network.OAuth2.JWT

Eq UserSub Source # 
Instance details

Defined in Network.OAuth2.JWT

Methods

(==) :: UserSub -> UserSub -> Bool #

(/=) :: UserSub -> UserSub -> Bool #

Ord UserSub Source # 
Instance details

Defined in Network.OAuth2.JWT

type Rep UserSub Source # 
Instance details

Defined in Network.OAuth2.JWT

type Rep UserSub = D1 ('MetaData "UserSub" "Network.OAuth2.JWT" "ms-auth-0.2.0.0-11f3onhyXnn9eYZnKIhkHh" 'True) (C1 ('MetaCons "UserSub" 'PrefixI 'True) (S1 ('MetaSel ('Just "userSub") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)))

lookupUser Source #

Arguments

:: (MonadIO m, Ord uid) 
=> Tokens uid t 
-> uid

user identifier e.g. sub

-> m (Maybe t) 

Look up a user identifier and return their current token, if any

expireUser Source #

Arguments

:: (MonadIO m, Ord uid) 
=> Tokens uid t 
-> uid

user identifier e.g. sub

-> m () 

Remove a user, i.e. they will have to authenticate once more

tokensToList :: MonadIO m => Tokens k a -> m [(k, a)] Source #

return a list representation of the Tokens object

Scotty misc

Azure App Service

withAADUser Source #

Arguments

:: MonadIO m 
=> Tokens UserSub t 
-> Text

login URI

-> (t -> Action m ())

call MSGraph APIs with token t, etc.

-> Action m () 

Decode the App Service ID token header X-MS-TOKEN-AAD-ID-TOKEN, look its user up in the local token store, supply token t to continuation. If the user sub cannot be found in the token store the browser is redirected to the login URI.

Special case of aadHeaderIdToken