Я пытаюсь интегрировать SAML с Amazon Cognito через приложение для Android.Я проследил за серией видеороликов YouTube на 101apps.co.za, где мне удалось успешно аутентифицировать пользователя, созданного вручную, на самой консоли Cognito как через размещенный пользовательский интерфейс, используя формат ссылок, который они предоставляют в своей документации, так и через мое простое приложение для Android.
В моем сценарии я должен аутентифицировать пользователей, используя идентификаторы и пароли электронной почты Office 365, поскольку это корпоративная среда.Я следовал статье, в которой мне удалось успешно войти в систему с помощью Office 365. Ссылка - AWS Cognito с Федерацией в Office 365 Мне удалось легко войти в систему с помощью сгенерированного пользовательского интерфейса Cognito.См. Ниже изображение
Единственная проблема заключается в том, что я не могу заставить это работать в моем приложении Android.Ниже приведена ошибка, которую я получаю.
Login failed User does not exist. (Service: AmazonCognitoIdentityProvider; Status Code: 400; Error Code: UserNotFoundException; Request ID: 3cd1e93e-d118-11e8-af77-098f4bda99f1)
Ниже приведен код из моего простого приложения для Android, в котором есть 2 текстовых поля для имени пользователя, пароля и кнопки для входа. Это было реализовано после серии руководств на YouTube, о которой я упоминалранее.
package com.midassafety.chulankumara.googleauthentication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoDevice;
import com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUser;
import com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUserSession;
import com.amazonaws.mobileconnectors.cognitoidentityprovider.continuations.AuthenticationContinuation;
import com.amazonaws.mobileconnectors.cognitoidentityprovider.continuations.AuthenticationDetails;
import com.amazonaws.mobileconnectors.cognitoidentityprovider.continuations.ChallengeContinuation;
import com.amazonaws.mobileconnectors.cognitoidentityprovider.continuations.MultiFactorAuthenticationContinuation;
import com.amazonaws.mobileconnectors.cognitoidentityprovider.handlers.AuthenticationHandler;
import org.w3c.dom.Text;
public class LoginActivity extends AppCompatActivity {
private static final String TAG = "Cognito";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
final EditText editTextUsername = findViewById(R.id.username);
final EditText editTextPassword = findViewById(R.id.password);
final AuthenticationHandler authenticationHandler = new AuthenticationHandler() {
@Override
public void onSuccess(CognitoUserSession cognitoUserSession, CognitoDevice cognitoDevice) {
Log.i(TAG, "Login successfull, can get tokens here");
cognitoUserSession.getIdToken();
}
@Override
public void getAuthenticationDetails(AuthenticationContinuation authenticationContinuation, String userId) {
Log.i(TAG, "Login getAuthenticationDetails()...");
/*need to get the userId & password to continue*/
AuthenticationDetails authenticationDetails = new AuthenticationDetails(userId, String.valueOf(editTextPassword.getText()), null);
// Pass the user sign-in credentials to the continuation
authenticationContinuation.setAuthenticationDetails(authenticationDetails);
// Allow this sign-in to continue
authenticationContinuation.continueTask();
}
@Override
public void getMFACode(MultiFactorAuthenticationContinuation multiFactorAuthenticationContinuation) {
Log.i(TAG, "Login getMFACode()...");
}
@Override
public void authenticationChallenge(ChallengeContinuation challengeContinuation) {
Log.i(TAG, "Login authenticationChallenge()...");
}
@Override
public void onFailure(Exception e) {
Log.i(TAG,"Login failed " + e.getLocalizedMessage());
}
};
Button buttonLogin = findViewById(R.id.login);
buttonLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CognitoSettings cognitoSettings = new CognitoSettings(LoginActivity.this);
CognitoUser thisUser = cognitoSettings.getUserPool().getUser(String.valueOf(editTextUsername.getText()));
Log.i(TAG,"Login button clicked....");
thisUser.getSessionInBackground(authenticationHandler);
}
});
}
}
Это класс CognitoSettings.java для обработки основных настроек
package com.midassafety.chulankumara.googleauthentication;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUserPool;
import com.amazonaws.regions.Regions;
public class CognitoSettings {
private String userPoolId = "ap-southeast-1_######";
private String clientId = "#############";
private String clientSecret = "************************redacted********************";
private Regions cognitoRegion = Regions.AP_SOUTHEAST_1;
private Context context;
public CognitoSettings(Context context){
this.context = context;
}
public String getUserPoolId(){
return userPoolId;
}
public String getClientId(){
return clientId;
}
public String getClientSecret() {
return clientSecret;
}
public Regions getCognitoRegion() {
return cognitoRegion;
}
public CognitoUserPool getUserPool(){
return new CognitoUserPool(context, userPoolId, clientId, clientSecret, cognitoRegion);
}
}
Я проверяю UserPool и вижу группу AutoGenerated для созданного мной SAML Identity Provider.
Я весь день просматриваю интернет, но не повезло.
Что я делаю не так или что я должен сделать для аутентификации пользователей?использовать SAML с O365?
Пожалуйста, помогите! ...