1.0.0 • Published 3 years ago

@optim-corp/passport-cios v1.0.0

Weekly downloads
2
License
MIT
Repository
github
Last release
3 years ago

passport-cios

Passport strategy for authenticating with OPTiM Cloud IoT OS (CIOS).

This module lets you authenticate using OPTiM Cloud IoT OS in your Node.js applications. By plugging into Passport, OPTiM Cloud IoT OS authentication can be easily and unobtrusively integrated into any application or framework that supports Connect-style middleware, including Express.

Install

npm install --save optim-corp/passport-cios

Usage

Use Express Examples

const passport = require("passport")
const session = require("express-session")
const CIOSStrategy = require("passport-cios")

/**
 * Inisialize
 */ 
passport.use(new CIOSStrategy({

        // Required
        clientID: env.client_id,            // [required] CIOS OAuth Client ID
        clientSecret: env.client_secret,    // [required] CIOS OAuth Client Secret
        callbackURL: env.redirect_url,      // [required] App Redirect URL (ex: http://localhost:8080/oauth2/callback)
        scope: env.scope,                   // [required] CIOS Scopes

        // Option
        authorizationURL: "https://" + env.cios_auth_uri + "/connect/authorize",    // default: https://auth.optim.cloud/connect/authorize
        tokenURL: "https://" + env.cios_auth_uri + "/connect/token",                // default: https://auth.optim.cloud/connect/token
        profileURL: "https://" + env.cios_account_uri + "/v2/me",                   // default: https://accounts.optimcloudapis.com/v2/me
    },
    (accessToken, refreshToken, res, profile, cb) => {
        return cb(null, res)
    }
))
passport.serializeUser(function(user, done) {
    done(null, user);
});

passport.deserializeUser(function(user, done) {
    done(null, user);
});

app.use(passport.initialize())
app.use(passport.session());


/**
 * Router
 */ 

// CIOS Login
app.get("/login/cios", passport.authenticate("cios"))

// Callback URL 
app.get("/oauth2/callback", passport.authenticate("cios", { failureRedirect: "/" }), (req, res) => {

    // Logic...

    // Example
    req.session.access_token = req.user.access_token    // AccessToken
    req.session.refresh_token = req.user.refresh_token  // Refresh Token

    return res.redirect("/")    // Redirect
},)

// Logout
app.get("/logout", (req, res)=>{

    // Logic...

    // Example
    req.session.access_token = null    // AccessToken
    req.session.refresh_token = null  // Refresh Token

    return res.redirect("/")    // Redirect
})

CIOS Strategy

Read passport strategy with require statement.

const CIOSStrategy = require("passport-cios")

Set CIOSStrategy constructor with specified arguments.

passport.use(new CIOSStrategy({
        clientID: env.client_id,           
        clientSecret: env.client_secret,    
        callbackURL: env.redirect_url,      
        scope: env.scope, 
        authorizationURL: "https://" + env.cios_auth_uri + "/connect/authorize",
        tokenURL: "https://" + env.cios_auth_uri + "/connect/token",    
        profileURL: "https://" + env.cios_account_uri + "/v2/me",
        },
    (accessToken, refreshToken, res, profile, cb) => {
        return cb(null, res)
    }
))

First argument

Type: Object

ParamsNamedescriptionrequireddefault
clientIDCIOS OAuth Client ID
clientSecretCIOS OAuth Client Secret
callbackURLApp Redirect URL (ex: http://localhost:8080/oauth2/callback)
scopeCIOS Scopes
authorizationURLCIOS Aurhorization URLhttps://auth.optim.cloud/connect/authorize
tokenURLCIOS Aurhorization Token URLhttps://auth.optim.cloud/connect/token
profileURLCIOS Get me URLhttps://accounts.optimcloudapis.com/v2/me

Second argument

Type: Callback function

(accessToken, refreshToken, res, profile, cb) => {
    return cb(null, res)
}
argument numberargument namedescription
1accessTokenReturn CIOS accessToken
2refreshTokenReturn CIOS refreshToken
3resReturn userdata and httpResponse
4profileReturn getMe response
5cbpassport callback function

Apply node express

Write serialize and deserialize logic.

passport.serializeUser(function(user, done) {
    done(null, user);
});

passport.deserializeUser(function(user, done) {
    done(null, user);
});

Apply app.

app.use(passport.initialize())
app.use(passport.session());

How to Support

If you have any issues or questions, please raise them on Github issues.

License

The MIT License

Copyright (c) 2021 OPTiM Corporation [https://www.optim.co.jp/](https://www.optim.co.jp/)