public IActionResult Generate([FromBody] TokenCreationPayload payload) { // according to https://docs.microsoft.com/en-us/azure/bot-service/rest-api/bot-framework-rest-direct-line-3-0-authentication?view=azure-bot-service-4.0#generate-token-versus-start-conversation // we don't start a conversation , we just issue a new token that is valid for specific conversation var userId = payload.UserId; var conversationId = Guid.NewGuid().ToString(); var claims = new List <Claim>(); claims.Add(new Claim(TokenBuilder.ClaimTypeConversationID, conversationId)); var expiresIn = this._inDirectlineSettings.TokenExpiresIn; var token = this._tokenBuilder.BuildToken(userId, claims, expiresIn); return(new OkObjectResult(new DirectLineConversation { ConversationId = conversationId, Token = token, ExpiresIn = expiresIn, })); }
private async Task <ConversationInfo> StartNewConversationAsync(string userId) { if (string.IsNullOrEmpty(userId)) { throw new ArgumentNullException(nameof(userId)); } var payload = new TokenCreationPayload { UserId = userId, Password = "******", }; var initConversation = await this._directLineClient.GenerateTokenAsync(payload) .ConfigureAwait(false); var directLineConversation = await this._directLineClient.StartConversationAsync(initConversation.Token) .ConfigureAwait(false); await this._ucstore.StoreAsync(userId, directLineConversation, "") .ConfigureAwait(false); return(await this._ucstore.GetConversationAsync(userId)); }
public async Task <DirectLineConversation> GenerateTokenAsync(TokenCreationPayload payload) { if (payload == null) { throw new ArgumentNullException(nameof(payload)); } var endpoint = "/v3/directline/tokens/generate"; var req = new HttpRequestMessage(HttpMethod.Post, endpoint); req.Content = new StringContent( JsonConvert.SerializeObject(payload), Encoding.UTF8, "application/json" ); var resp = await this._httpClient.SendAsync(req); var json = await resp.Content.ReadAsStringAsync(); var x = JsonConvert.DeserializeObject <DirectLineConversation>(json); return(x); }