# Overview 

* Authentication to Wordpress is only possible with an account in uffd, regular authentication is disabled 
* All users with group 'wordpress_access' can access Wordpress with 'Editor' privileges, the user in Wordpress is created on first login 
* Users with group 'wordpress_admin' get 'Administrator' privigeges. 

# Setup OIDC Authentication via uffd 

Uffd Reference: https://git.cccv.de/uffd


## Setup in Wordpress 

Wordpress Plugin: OpenID Connect Generic Client
https://de.wordpress.org/plugins/daggerhart-openid-connect-generic

Pluin settings:
* Anmeldetyp:
* Client-ID: wordpress
* Client Secret Key: <secret key>
* OpenID Scope: openid profile email groups
* Endpunkt-URL zur Anmeldung: https://uffd.test-warpzone.de/oauth2/authorize
* Endpunkt-URL zur Benutzerinfo: https://uffd.test-warpzone.de/oauth2/userinfo
* Endpunkt-URL zur Token-Verifizierung: https://uffd.test-warpzone.de/oauth2/token
* Endpunkt-URL zum Sitzungsende: https://uffd.test-warpzone.de/oauth2/logout
* Identitäts-Schlüssel: preferred_username
* Spitznamen-Schlüssel: preferred_username
* Email-Format: {email}
* Anzeigename-Formatierung: {preferred_username}
* Mit Benutzername identifizieren: Ja
* State-Zeitbeschränkung: 180
* Aktualisierungstoken aktivieren: Ja
* Existierende Benutzer verknüpfen: Ja
* Benutzer erstellen, wenn er nicht existiert: Ja
* Zur ursprünglichen Seite zurückleiten: Nein
* Zur Anmeldeansicht weiterleiten, wenn die Sitzung abgelaufen ist: Ja

## Setup in uffd

Create Groups:

- wordpress_access: General Access to Wordpress 
- wordpress_admin: This Group will be Mapped to the Group admin in Wordpress 

Create a Service / OAuth Client: 

Only Users with goup wordpress_access can access Wordpress 

Client-ID: wordpress 
Client-Secret: from file wordpress_client_secret on the server
Redirect-URIs: 
* https://www.test-warpzone.de/wp-admin/admin-ajax.php?action=openid-connect-authorize

## Mapping von Rollen in Wordpress

Wordpress Plugin: WPCode 
https://de.wordpress.org/plugins/insert-headers-and-footers/

Additional references: 
https://github.com/oidc-wp/openid-connect-generic/issues/164

Um die Wordpress Berechtigungen auf Basis der Gruppen in uffd zu steuern ist ein zusätzliches Code-Snippet erforderlich. 
Dieses Code-Snippet kann am besten mit dem addon 'WPCode' verwaltet werden. 
In dem Plugin muss das folgenden neues PHP-Snippet erstellt und aktiviert werden.

Benutzer, mit der Gruppe 'wordpress_admin' in uddf erhalten Administrator-Berechtigungen. 
Alle anderen Benutzer erhalten Editor-Berechtigungen. 

```
add_action('openid-connect-generic-update-user-using-current-claim', function( $user, $user_claim) {
	
    // Based on some data in the user_claim, modify the user.
	foreach($user_claim as $key => $value) {
		error_log('Openid Role mapping: User claim: ' . $key . ', Value: ' . $value);
	}
	
	if ( array_key_exists( 'groups', $user_claim ) ) {
		
		error_log('Openid Role mapping: Groups: ' . implode(',',$user_claim['groups']));

		if ( in_array('wordpress_admin', $user_claim['groups'] )) {
			
			error_log('Openid Role mapping: Set role: Administrator');
        	$user->set_role( 'administrator' );
		}
		else {
			
			error_log('Openid Role mapping: Set role: Editor');
			$user->set_role( 'editor' );
		}
    }
}, 10, 2);
```