В настоящее время я использую данные заполнения Salesforce API.
В контроллере учетной записи у меня есть метод, использующий поток имени пользователя / пароля Salesforce для авторизации использования API, и я прикрепил его для это при входе в систему, этот процесс в порядке, он работает, и я проверил его.
Но когда моя проблема вступает в игру, мне нужно получить доступ к значению AccessToken и значению ServiceUrl, сгенерированному при входе в систему, поэтому я Можно использовать мой, например, метод «GetEvents» в ДРУГОМ контроллере.
В настоящее время я использую модели, вообще без контекста данных, потому что он мне не нужен. Но если бы я должен был создать экземпляр этой модели в моем другом контроллере со свойством AccessToken, значение не было бы передано из метода контроллера, который сгенерировал этот токен.
Имейте в виду, что эти методы работают просто отлично, но мне нужно авторизоваться для просмотра ЛЮБОГО из этих событий, и если у него нет этих AccessToken и ServiceUrl из метода входа в систему, я не могу просмотреть какие-либо Мероприятия.
Как мне go узнать об этом?
МЕТОД В HomeController
public async void GetAllEvents()
{
TokenModel tm = new TokenModel();
HttpClient queryClient = new HttpClient();
string restQuery = tm.ServiceUrl + "/services/data/v25.0/query?q=SELECT+Subject+from+Event";
Console.WriteLine(restQuery);
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, restQuery);
Console.WriteLine(request);
// Adding the token to the header
request.Headers.Add("Authorization", "Bearer " + tm.AccessToken);
// Return JSON to the caller
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
//Call Endpoint Async
HttpResponseMessage response = await queryClient.SendAsync(request);
string result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
МЕТОД В AccountController
[HttpPost]
[AllowAnonymous]
public IActionResult Login(AuthRequestModel authRequest)
{
if (!ModelState.IsValid)
{
return View(authRequest);
}
if(authRequest == null)
{
return BadRequest("Authorization is missing");
}
var isAuth = Authentication.ActiveDirectoryValidation(authRequest.Username, authRequest.Password);
if(isAuth == true)
{
AuthR().Wait();
return RedirectToAction("Index", "Home");
}
return View();
}
// Salesforce Username / Password Validation
public async Task<string> AuthR()
{
TokenModel tm = new TokenModel();
var handler = new HttpClientHandler()
{
SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls11 | SslProtocols.Tls
};
HttpClient authClient = new HttpClient(handler);
string clientId = _config.GetSection("Keys").GetSection("client_id").Value;
string clientSecret = _config.GetSection("Keys").GetSection("client_secret").Value;
string username = _config.GetSection("Keys").GetSection("username").Value;
string password = _config.GetSection("Keys").GetSection("password").Value;
HttpContent content = new FormUrlEncodedContent(new Dictionary<string, string>
{
{"grant_type","password"},
{"client_id",clientId},
{"client_secret",clientSecret},
{"username",username},
{"password",password}
}
);
HttpResponseMessage message = await
authClient.PostAsync("https://test.salesforce.com/services/oauth2/token", content);
string responseString = await message.Content.ReadAsStringAsync();
var model = JsonConvert.DeserializeObject<Dictionary<string, string>>(responseString);
tm.AccessToken = model["access_token"];
tm.ServiceUrl = model["instance_url"];
return tm.AccessToken;
}