Я разрабатываю MS Bot с фреймворком v4 и пытаюсь настроить аутентификацию. Проблема в том, что я могу аутентифицироваться, но если я хочу восстановить маркер аутентификации пользователя, перекомпоновав диалоговое окно (найдено здесь ), тогда я получаю новый логин-запрос вместо простого извлечения токена.
Вот что попробовал:
- с использованием Azure AD v1 и v2
- поиск документации (но она устарела или совпадает с найденной по ссылке)
Мой код (если вам нужно что-то еще, не стесняйтесь спрашивать):
// Register the Promt
AddDialog(Prompt(ConnectionName));
// Prompts the user to log in using the OAuth provider specified by the connection name.
// Prompt definition
public static OAuthPrompt Prompt(string connectionName) => new OAuthPrompt(
LoginPromptName,
new OAuthPromptSettings
{
ConnectionName = connectionName,
Text = "Please login",
Title = "Login",
Timeout = 300000, // User has 5 minutes to login
});
private async Task<DialogTurnResult> PromptStepAsync(WaterfallStepContext context, CancellationToken cancellationToken)
{
var state = await UserProfileAccessor.GetAsync(context.Context);
return await context.BeginDialogAsync(LoginPromptName, cancellationToken: cancellationToken);
}
private async Task<DialogTurnResult> LoginStepAsync(WaterfallStepContext context, CancellationToken cancellationToken)
{
var loginState = await UserProfileAccessor.GetAsync(context.Context);
// Get the token from the previous step. Note that we could also have gotten the
// token directly from the prompt itself. There is an example of this in the next method.
var tokenResponse = (TokenResponse)context.Result;
if (tokenResponse != null)
{
* DOES SOMETHING WHEN LOGGED IN*
}
else
{
* DOES SOMETHING WHEN LOGIN FAILED *
}
/* !!
HERE IS THE PROBLEM IN STEAD OF CHECKING IF THE USER
IS ALREADY LOGGED IN AND JUST RETRIEVING THE TOKEN I
GET A NEW LOGIN SCREEN.
!!
*/
var token2Response = await context.BeginDialogAsync(LoginPromptName, null, cancellationToken)
}
Таким образом, в основном я хочу получить токен пользователя, чтобы в различных методах и диалоговых окнах проверять, вошел ли пользователь в систему.