Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Published by Scroll Versions from space PDOIDC and version Moscow_OIDC

...

Code Block
languagexml
<html>
  <head>
    <script>
		function init() {
        	OIDC.doInit( {
            	// URL to OIDC service
            	oauth_url: '<oidc-baseurl>/protocol/openid-connect/auth',
	            // Merchant given client ID on the OIDC service
            	// TODO: Replace this with your own!
            	client_id: 'your_client_id',
            	// Your callback URL that will receive the Authorization Grant response
            	// TODO: Replace this with your own!
            	redirect_uri: 'https://yourdomain.com/oidc/callback'
        	} );
    	};
		document.body.addEventListener( 'oidc-connector-loaded', init, false);
	</script>
    <script src="<connector-baseurl>/connector.bundle.min.js" async defer></script>
  </head>
  <body>
  </body>
</html>

...

Code Block
languagexml
<html>
  <head>
  </head>
  <body>
	<button id="oidc-login" disabled>Login</button>
	<button id="oidc-login-scope" disabled>Login with another scope</button>
 
  	<script>
    	// Handle button click and start login
    	function onOIDCButtonClick( scope ) {
        	OIDC.doConnect({
         		config: {
			   		scope: scope
				}
        	});
    	}
    
		function init() {
        	OIDC.doInit( {
	            	// URLMerchant to OIDC service
            	oauth_url: '<oidc-baseurl>/protocol/openid-connect/auth',
	            // Merchant given clientgiven client ID on the OIDC service
            	// TODO: Replace this with your own!
            	client_id: 'your_client_id',
            	// Your callback URL that will receive the Authorization Grant response
            	// TODO: Replace this with your own!
            	redirect_uri: 'https://yourdomain.com/oidc/callback'
        	} );
			document.getElementById('oidc-login').disabled = false;
			document.getElementById('oidc-login-scope').disabled = false;
    	};
		document.body.addEventListener( 'oidc-connector-loaded', init, false);
 
		document.getElementById('oidc-login').addEventListener( 'click', onOIDCButtonClick.bind( null, 'openid' ), false );
		document.getElementById('oidc-login-scope').addEventListener( 'click', onOIDCButtonClick.bind( null, 'openid profile' ), false );
	</script>
    <script src="<connector-baseurl>/connector.bundle.min.js" async defer></script>
  </body>
</html>

...

Code Block
languagexml
<html>
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="initial-scale=1.0"/>
    <title>OIDC Connector - Window mode example</title>
  </head>
  <body>

    <button disabled>Logg inn med OIDC</button>

    <script>
    	// Handle button click and start login
    	function onOIDCButtonClick() {
        	OIDC.doConnect({
         	   callback: function( err, data ) {
         	       if ( err ) {
         	           return;
         	       }
        	        console.log( data );
        	    }
        	});
    	}
    	
		function onOIDCLoaded() {
        	// Initialise OIDC with required parameters
       		OIDC.doInit({
            	// URLMerchant togiven OIDC service
            	oauth_url: '<oidc-baseurl>/protocol/openid-connect/auth',
            	// Merchant given client client ID on the OIDC service
            	client_id: 'your_client_id',
            	// Your callback URL that will receive the Authorization Grant response
            	redirect_uri: 'https://yourdomain.com/oidc/callback',
            	// Set window as chosen integration method
            	method: 'window',
        	});
 
			// Start OIDC login on click of a button
    		var button = document.querySelector('button');
    		button.addEventListener('click', onOIDCButtonClick, false);
 
			// Enable button
			button.disabled = false;
    	}

    	// Call initialize when OIDC Connector has loaded
    	document.body.addEventListener( 'oidc-connector-loaded', onOIDCLoaded, false);
	</script>
	<script async defer src="<connector-baseurl>/connector.bundle.min.js"></script>
  </body>
</html>

...

Implicit mode example

Here we demonstrate the special implicit mode related parameters. The chosen UX method is also inline - meaning an iframe will be used to open the login. The JS Connector is loaded asynchrously at the end of the page.

Code Block
languagexml
<html>
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="initial-scale=1.0"/>
    <title>OIDC Connector - Implicit mode example inline</title>
  </head>
  <body>

    <button disabled>Logg inn med OIDC</button>
	<div id="auth"></div>

	<script>
    	function onOIDCButtonClick() {
        	OIDC.doConnect( {
            	inlineElementID: 'auth',
            	callback: function( err, data ) {
                	if ( err ) {
                    	return;
                	}
                	console.log( data );
            	}
        	} );
    	}
    	function onOIDCLoaded() {
        	OIDC.doInit({
            	// URL to OIDC service
           		oauth_url: '<oidc-baseurl>/protocol/openid-connect/auth',
            	// Merchant given client ID on the OIDC service
            	client_id: 'your_client_id',
            	// Your callback URL that will receive the Authorization Grant response
            	redirect_uri: 'https://yourdomain.com/oidc/callback',
            	// Set inline as chosen integration method
            	method: 'inline',
           	 	// Activate implicit flow mode by setting response type to id_token token
            	response_type: 'id_token token',
            	// Set response mode to form_post
            	response_mode: 'form_post'
        	});
		
			var button = document.querySelector('button');
	    	button.addEventListener('click', onOIDCButtonClick, false);
 
			// Enable button
			button.disabled = false;
    	}

    	document.body.addEventListener( 'oidc-connector-loaded', onOIDCLoaded, false);
	</script>
	<script async defer src="<connector-baseurl>/connector.bundle.min.js"></script>
  </body>
</html>

Callback page example for redirect_uri

This example can be implemented on your redirect_uri location to automatically pass the OIDC authentication response to the parent context (window/iframe host) which then will be passed into your callback method given in OIDC.doConnect().

Code Block
languagexml
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/html">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="initial-scale=1.0"/>
    <title>OIDC Connector Test Callback</title>
</head>
<body>
<!--
This callback page is rendered at callback_uri after the OIDC authorization request returns.

This is an example implementation of a callback script for those sites that use frame method inline (iframe) or window.
The idea of this page is to communicate with the BankID JS Connect instance sitting in the parent site that launched the
iframe or window in the first place.

Depending on the response methods chosen in the initial request, this page will attempt to use XDM (Cross-domain messaging)
messages to communicate to the parent site.

When this page loads it will do the following:

1. Checking a special if this was a form_post response_mode (handled by the server).
2. Retrieving response data based on response_mode chosen: form_post, query or fragment
3. Checking data received and doing an XDM event postMessage to parent Window with data.

That's it!

BankID JS Connect will now close this window/frame.
-->
<script>
	// If FORM POST, the server side handler must inject the received data here as a JSON string
    var formPost = '{form_post}';
    formPost = /{\w+}/.test(formPost) ? null : JSON.parse( formPost );

    function urlSearchToObj( search ) {
        var pairs = search.substring( 1 ).split( '&' ),
            obj = {},
            pair;

        for ( var i = 0; i < pairs.length; i ++) {
            if ( pairs[i] === '' ) {
                continue;
            }

            pair = pairs[i].split( '=' );
            obj[decodeURIComponent( pair[0] )] = decodeURIComponent( pair[1] );
        }

        return obj;
    }
    // Get form_post data, or query params, or hash fragment params
    var urlParams = formPost || urlSearchToObj( document.location.search || document.location.hash );
    var hasError = false;

    if ( urlParams['error'] ) {
        console.error( 'Received error' );
        hasError = true;
    }

    var windowParent = window.opener || window.parent;

    if ( windowParent !== window) {
        if ( !hasError && responseData ) {
            windowParent.postMessage( JSON.stringify( { type: 'oidc-connector-response-data', data: urlParams } ), '*' );
        } else {
            windowParent.postMessage( JSON.stringify( { type: 'oidc-connector-error', error: urlParams['error'] } ), '*' );
        }
    } else {
        console.warn( 'OIDCConnectorError: Could not send code, does not have parent window' );
    }
</script>

</body>
</html>