Writing OAuthDataProviders
Using CXF OAuth service implementations will help a lot with setting up an OAuth server. As you can see from the above sections, these services rely on a custom OAuthDataProvider implementation.
The main task of OAuthDataProvider is to persist and generate access tokens. Additionally, as noted above, AuthorizationCodeDataProvider needs to persist and remove the code grant registrations. The way it's done is really application-specific. Consider starting with a basic memory based implementation and then move on to keeping the data in some DB.
Note that OAuthDataProvider supports retrieving Client instances but it has no methods for creating or removing Clients. The reason for it is that the process of registering third-party clients is very specific to a particular OAuth2 application, so CXF does not offer a registration support service and hence OAuthDataProvider has no Client create/update methods. You will likely need to do something like this:
public class CustomOAuthProvider implements OAuthDataProvider {
public Client registerClient(String applicationName,
String applicationURI, ...) {}
public void removeClient(String cliendId) {}
// ...
// OAuthDataProvider methods
}
CustomOAuthProvider will also remove all tokens associated with a given Client in removeClient(String cliendId).
Finally OAuthDataProvider may need to convert opaque scope values such as "readCalendar" into a list of OAuthPermissions. AuthorizationCodeGrantService and OAuth2 security filters will depend on it (assuming scopes are used in the first place). In the former case AuthorizationCodeGrantService will use this list to populate OAuthAuthorizationData - the reason this bean only sees OAuthPermission is that some of the properties OAuthPermission keeps are of no interest to OAuthAuthorizationData handlers.