package com.monkeyk.os.domain.oauth;
import org.apache.oltu.oauth2.common.OAuth;
import org.apache.oltu.oauth2.common.utils.OAuthUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
/**
* 15-6-20
* <p/>
* AuthenticationId 的生成器
* MD5加密
*
* @author Shengzhao Li
*/
public class DefaultAuthenticationIdGenerator implements AuthenticationIdGenerator {
private static final Logger LOGGER = LoggerFactory.getLogger(DefaultAuthenticationIdGenerator.class);
public DefaultAuthenticationIdGenerator() {
}
public String generate(String clientId, String username, String scope) {
Map<String, String> map = new HashMap<>();
map.put(OAuth.OAUTH_CLIENT_ID, clientId);
//check it is client only
if (!clientId.equals(username)) {
map.put(OAuth.OAUTH_USERNAME, username);
}
if (!OAuthUtils.isEmpty(scope)) {
map.put(OAuth.OAUTH_SCOPE, scope);
}
return digest(map);
}
protected String digest(Map<String, String> map) {
MessageDigest digest;
try {
digest = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
LOGGER.warn("Digest error", e);
throw new IllegalStateException("MD5 algorithm not available. Fatal (should be in the JDK).");
}
try {
byte[] bytes = digest.digest(map.toString().getBytes("UTF-8"));
return String.format("%032x", new BigInteger(1, bytes));
} catch (UnsupportedEncodingException e) {
LOGGER.warn("Encoding error", e);
throw new IllegalStateException("UTF-8 encoding not available. Fatal (should be in the JDK).");
}
}
}