Отображение пользователю списка выбора значений при входе#
Можно настроить, чтобы при входе Blitz Identity Provider показал пользователю окно выбора из списка значений и сохранил результат выбора в атрибуте в учетной записи пользователя.
Процедура#
Процедура ChoicePipe
позволяет показывать пользователю при входе страницы выбора списка значений. Перед использованием необходимо внести следующие изменения:
в константе
DOMAIN
вместо<BLITZ-HOST>
указать URI, по которому из браузера пользователя доступен Blitz Identity Provider, а в константеCLIENT_ID
вместо<CLIENT_ID>
указать идентификатор приложения (с правами наscope openid
), от имени которого будет выполняться вспомогательное приложение;
public class ChoicePipe implements Strategy {
private final Logger logger = LoggerFactory.getLogger("com.identityblitz.idp.flow.dynamic");
private final static String DOMAIN = "<BLITZ-HOST>";
private final static String CLIENT_ID = "<CLIENT_ID>";
@Override public StrategyBeginState begin(final Context ctx) {
if ("login".equals(ctx.prompt())){
List<String> methods = new ArrayList<String>(Arrays.asList(ctx.availableMethods()));
methods.remove("cls");
return StrategyState.MORE(methods.toArray(new String[0]), true);
} else {
if(ctx.claims("subjectId") != null)
return StrategyState.ENOUGH();
else
return StrategyState.MORE(new String[]{});
}
}
@Override
public StrategyState next(Context ctx) {
List<List<String>> choice = new ArrayList<List<String>>(){};
choice.add(Arrays.asList("Value 1"));
choice.add(Arrays.asList("Value 2"));
try {
if (ctx.user() == null || ctx.user().requiredFactor() == null
|| ctx.user().requiredFactor().equals(ctx.justCompletedFactor())) {
String res = new ObjectMapper().writeValueAsString(choice);
String choiceJson = Base64.getUrlEncoder().encodeToString(res.getBytes("UTF-8"));
return choice(ctx, choiceJson);
}
else
return StrategyState.MORE(new String[] {});
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
private StrategyState choice(final Context ctx, final String choiceJson) {
String uri = "https://" + DOMAIN + "/blitz/pipes/choice/start?appId=" + CLIENT_ID + "&pipeId=select_value&choices=" + choiceJson;
Set<String> claims = new HashSet<String>(){{
add("instanceId");
}};
Set<String> scopes = new HashSet<String>(){{
add("openid");
}};
return StrategyState.ENOUGH_BUILDER()
.withPipe(uri, CLIENT_ID, scopes, claims)
.build();
}
}
Добавление процедуры в blitz.conf#
В конфигурационном файле blitz.conf
добавьте раздел blitz.prod.local.idp.built-in-pipes
, в котором назначьте вспомогательному приложению с типом choice
идентификатор id
, определенный в процедуре, и имя атрибута claim
, в который необходимо сохранять результат выбора.
Пример конфигурации вспомогательного приложения choice
:
"built-in-pipes": {
"choice": [
{
"id": "select_value",
"claim": "role"
}
]
}