Würde helfen, wenn Sie einige Code-Schnipsel auflisten können, wie Sie die URL erstellen und das Token abrufen.
Hier ist ein Beispiel, wie wir das, was Sie versuchen, sehr ähnlich machen, vielleicht wird es helfen.
Definieren Sie einen Dienst wie unten (Snippet) und definieren die Werte (Host, URL, etc.) in OSGi (oder Sie können auch sie hart Code für Testzwecke)
@Service(value = OauthAuthentication.class)
@Component(immediate = true, label = "My Oauth Authentication", description = "My Oauth Authentication", policy = ConfigurationPolicy.REQUIRE, metatype = true)
@Properties({
@Property(name = Constants.SERVICE_VENDOR, value = "ABC"),
@Property(name = "service.oauth.host", value = "", label = "Oauth Host", description = "Oauth Athentication Server"),
@Property(name = "service.oauth.url", value = "/service/oauth/token", label = "Oauth URL", description = "Oauth Authentication URL relative to the host"),
@Property(name = "service.oauth.clientid", value = "", label = "Oauth Client ID", description = "Oauth client ID to use in the authentication procedure"),
@Property(name = "service.oauth.clientsecret", value = "", label = "Oauth Client Secret", description = "Oauth client secret to use in the authentication procedure"),
@Property(name = "service.oauth.granttype", value = "", label = "Oauth Grant Type", description = "Oauth grant type") })
public class OauthAuthentication {
...
@Activate
private void activate(ComponentContext context) {
Dictionary<String, Object> properties = context.getProperties();
host = OsgiUtil.toString(properties, PROPERTY_SERVICE_OAUTH_HOST,new String());
// Similarly get all values
url =
clientID =
clientSecret =
grantType =
authType = "Basic" + " "+ Base64.encode(new String(clientID + ":" + clientSecret));
}
public static void getAuthorizationToken(
try {
UserManager userManager = resourceResolver.adaptTo(UserManager.class);
Session session = resourceResolver.adaptTo(Session.class);
// Getting the current user
Authorizable auth = userManager.getAuthorizable(session.getUserID());
user = auth.getID();
password = ...
...
...
String serviceURL = (host.startsWith("http") ? "": protocol + "://") + host + url;
httpclient = HttpClients.custom().build();
HttpPost httppost = new HttpPost(serviceURL);
// set params
ArrayList<BasicNameValuePair> formparams = new ArrayList<BasicNameValuePair>();
formparams.add(new BasicNameValuePair("username", user));
formparams.add(new BasicNameValuePair("password", password));
formparams.add(new BasicNameValuePair("client_id", clientID));
formparams.add(new BasicNameValuePair("client_secret",clientSecret));
formparams.add(new BasicNameValuePair("grant_type",grantType));
UrlEncodedFormEntity postEntity = new UrlEncodedFormEntity(formparams, "UTF-8");
httppost.setEntity(postEntity);
// set header
httppost.addHeader("Authorization", authType);
response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
if (response.getStatusLine().getStatusCode() == 200) {
if (entity != null) {
object = new JSONObject(EntityUtils.toString(entity));
}
if (object != null) {
accessToken = object.getString("access_token");
////
}
}
}
Danke für die Antwort. Ich verwende die Oauth-Funktionalität in Postman, um die URLs zu erstellen und das Token herunterzuladen, das Sie kostenlos von [hier] herunterladen können (https://chrome.google.com/webstore/detail/postman/fhbjgbifljjbdggehcddcbncdddomop?hl=de). Wenn Sie eine Vanilla-Installation von AEM 6.1 ausführen und einen neuen Oauth-Client hinzufügen und dann die Clientdetails in Postman verwenden, haben Sie mein Szenario neu erstellt. Ich bin von einem .NET-Hintergrund so versucht, einen .NET-Client zu erstellen, aber das hat auch einen 403 zurückgegeben, wenn Sie versuchen, nach/oauth/token zu posten. – GerardBeckerleg
Ich habe vielleicht missverstanden. Können Sie die URLs in der Publish (4503) Umgebung testen, sehen Sie, ob es einen Unterschied macht. –
Das gleiche Problem bei der Ausführung in der Umgebung Publish (4503). – GerardBeckerleg