Я пытаюсь аутентифицировать пользователей в приложении Teams (из действия Отправка расширений обмена сообщениями).
В этот образец Я обнаружил, что поток аутентификации начинается в OnTeamsMessagingExtensionQueryAsync
, но Мне нужно аутентифицировать пользователей из OnTeamsMessagingExtensionSubmitActionAsync
(Submit
action).
Все хорошо, но я не могу получить доступ к пользовательскому State
, чтобы понять, аутентифицирован ли пользователь, а затем получить маркер для использования Graph. OnTeamsMessagingExtensionQueryAsync
получает MessagingExtensionQuery
как действие, обладающее свойством State
. Но OnTeamsMessagingExtensionSubmitActionAsync
получает MessagingExtensionAction
как действие, которое не имеет свойства State
.
Я пытался получить его через
var state = turnContext.TurnState.Get<string>("State");
, но это не кажется работать. Я не нашел других вариантов, чтобы получить State
.
Страница аутентификации открывается и работает нормально (я могу одобрить приложение).
Можете ли вы рассказать, как его получить? Или как авторизовать пользователей от отправки действия? Спасибо.
Полный метод ниже:
protected override async Task<MessagingExtensionActionResponse> OnTeamsMessagingExtensionSubmitActionAsync(ITurnContext<IInvokeActivity> turnContext, MessagingExtensionAction action, CancellationToken cancellationToken)
{
var magicCode = string.Empty;
var state = turnContext.TurnState.Get<string>("State"); // always null
// var state = action.State - in sample
if (!string.IsNullOrEmpty(state))
{
int parsed = 0;
if (int.TryParse(state, out parsed))
{
magicCode = parsed.ToString();
}
}
var tokenResponse = await(turnContext.Adapter as IUserTokenProvider).GetUserTokenAsync(turnContext, _connectionName, magicCode, cancellationToken: cancellationToken);
if (tokenResponse == null || string.IsNullOrEmpty(tokenResponse.Token))
{
var signInLink = await(turnContext.Adapter as IUserTokenProvider).GetOauthSignInLinkAsync(turnContext, _connectionName, cancellationToken);
return new MessagingExtensionActionResponse
{
ComposeExtension = new MessagingExtensionResult
{
Type = "auth",
SuggestedActions = new MessagingExtensionSuggestedAction
{
Actions = new List<CardAction>
{
new CardAction
{
Type = ActionTypes.OpenUrl,
Title = "Authorization",
Value = signInLink,
},
},
},
},
};
}
<<remaining code>>
return null;
}