ASP.NET Web API 2身份验证/授权代理建议

时间:2019-02-27 08:02:20

标签: rest asp.net-web-api jwt

我需要您的建议和经验。这是我的情况。

  • 有一个Rest Web API提供程序。 (主持人)(我们称它为A)
  • 有些客户端将使用提供商A的两种方法。
  • 我正在提供商A和客户端之间实现代理Rest ASP.NET Web API 2。
  • 提供商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};

这是我的控制器,我想在启动器内返回Token。

[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,客户端和我的代理Web API将基于SSL进行通信。

编辑: 我使用了基于令牌的身份验证,并解决了如何在响应中返回令牌。

0 个答案:

没有答案