Мне нужны ваши советы и опыт.Вот мой сценарий.
- Существует поставщик веб-API Rest.(Хост) (назовем это A)
- Есть клиенты, которые собираются использовать 2 метода провайдера A.
- Я реализую прокси-сервер Rest ASP.NET web API 2 между провайдерамиA и клиенты.
- У провайдера A уже есть аутентификация на основе токенов.
- Существует метод инициализации провайдера A, которому я отправляю подпись, состоящую из секретного ключа, предоставленного мне снекоторая другая информация, MD5 хэшированная.
- Я думаю, что эта подпись проверена в поставщике A и возвращает токен, если он действителен.(Время истечения 20 минут)
- И с этим токеном я вызываю второй метод провайдера и заканчиваю свой процесс.
Теперь мои вопросы:
- Должен ли я по-прежнему иметь механизм аутентификации / авторизации для моего прокси?и почему?
- Могу ли я изменить TokenEndpointPath?(AspNetWebAPIOAuth.OAuth.Startup) На самом деле, я не хочу, чтобы клиент сделал дополнительный вызов службы.Могу ли я установить путь для существующего действия контроллера?
Вот мое действие контроллера, откуда я хотел бы вернуть токен.Я хочу установить токен в объект Initiate.
[HttpPost, Route("initiation")]
public async Task<IHttpActionResult> PostInitiate(InitiateRequest initiate)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
context.InitiatesRequests.Add(initiate);
await context.SaveChangesAsync();
HttpClient httpClient = new HttpClient();
HttpContent content = new StringContent(
JsonConvert.SerializeObject(initiate),
Encoding.UTF8,
"application/json"
);
HttpResponseMessage response =
await httpClient.PostAsync("https://test.com/purchaseinitiation", content);
string htmlResponse = await response.Content.ReadAsStringAsync();
return Ok(htmlResponse);
}
Могу ли я вернуть сгенерированный токен в моем существующем методе контроллера, как я упоминал в моем примере кода?Возможно ли это?
Вот мой собственный путь к конечной точке токена, который является моим существующим действием контроллера ниже.
OAuthOptions = new OAuthAuthorizationServerOptions{
TokenEndpointPath = new PathString("/api/v2/pin/initiation"),
Provider = new ApplicationOAuthProvider(PublicClientId),
AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
AllowInsecureHttp = true};
Вот мой контроллер, где я хотел бы вернуть токен внутриinitiate.
[RoutePrefix("api/v2/pin")]
public class InitiatesController : ApiController
{
private EPINMiddleWareAPIContext context;
public InitiatesController(EPINMiddleWareAPIContext context)
{
this.context = context;
}
// POST: api/Game
[HttpPost, Route("initiation")]
public async Task<IHttpActionResult> PostInitiate(InitiateRequest initiate)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
Примечание. Поставщик A, клиенты и веб-API моего прокси-сервера будут взаимодействовать на основе SSL.
EdiT: Я использовал проверку подлинности на основе токена и решилкак вернуть токен внутри моего ответа.