Как сохранить токен в MVC Controller, чтобы мы могли использовать его при использовании атрибута Authorize в Web API? - PullRequest
0 голосов
/ 04 ноября 2019

Я отправляю учетные данные в API, который создает пользователя, затем с помощью метода входа MVC. Я создаю токен в Web API и возвращаю токен в ответ на MVC. Теперь я хочу сохранить токен в файле cookie MVC и снова отправить его в Web API при нажатии авторизованного контроллера API. действие. Вот мой класс Startup.cs в проекте WEB API.

 public class Startup
{
    public static OAuthAuthorizationServerOptions OAuthOptions { get; set; }

    public void Configuration(IAppBuilder app)
    {

        ConfigureOAuth(app);
        var config = new HttpConfiguration();
        // config.Filters.Add(new AuthorizeAttribute());

        WebApiConfig.Register(config);
        app.UseWebApi(config);

    }
    public void ConfigureOAuth(IAppBuilder app)
    {
        app.UseCors(CorsOptions.AllowAll);
        OAuthOptions = new OAuthAuthorizationServerOptions
        {
            TokenEndpointPath = new PathString("/token"),
            Provider = new OAuthCustomeTokenProvider(), // We will create               
            AccessTokenExpireTimeSpan = TimeSpan.FromSeconds(40),
            AllowInsecureHttp = true,
            RefreshTokenProvider = new OAuthCustomRefreshTokenProvider() // We will create
        };

        app.UseOAuthAuthorizationServer(OAuthOptions);
        app.UseOAuthBearerTokens(OAuthOptions);
        app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
    }
}

Мой метод входа в MVC Controller.

    [HttpPost]
    public ActionResult Login(UserViewModel userViewModel)
    {
        var client = new RestClient(url);
        var request = new RestRequest("api/Users/LoginUser", Method.POST);
        request.AddJsonBody(userViewModel);
        var response = client.Execute<List<UserViewModel>>(request);
        var jObject = JObject.Parse(response.Content);

        String token = jObject.GetValue("access_token").ToString();

        return RedirectToAction("Index", "Dashboard");
    }

Мой код контроллера Web API:

  [HttpPost]
    [Route("LoginUser")]
    public async Task<IHttpActionResult> LoginUser(User model)
    {
        var request = HttpContext.Current.Request;
        var tokenServiceUrl = request.Url.GetLeftPart(UriPartial.Authority) + request.ApplicationPath + Startup.OAuthOptions.TokenEndpointPath;
        using (var client = new HttpClient())
        {
            var requestParams = new List<KeyValuePair<string, string>>
            {
            new KeyValuePair<string, string>("grant_type", "password"),
            new KeyValuePair<string, string>("username", model.EmailId),
            new KeyValuePair<string, string>("password", model.UserPassword)
            };
            var requestParamsFormUrlEncoded = new FormUrlEncodedContent(requestParams);
            var tokenServiceResponse = await client.PostAsync(tokenServiceUrl, requestParamsFormUrlEncoded);
            var responseString = await tokenServiceResponse.Content.ReadAsStringAsync();
            var responseCode = tokenServiceResponse.StatusCode;
            var responseMsg = new HttpResponseMessage(responseCode)
            {
                Content = new StringContent(responseString, Encoding.UTF8, "application/json")
            };
            return ResponseMessage(responseMsg);
        }
    }

Я хочу получить список сотрудников от контроллера WebC MVC

 [HttpGet]
    public UserViewModel GetEmployeeRecord(UserViewModel param)
    {
        var client = new RestClient(url);
        var request = new RestRequest("api/Users/GetAllEmployeeList", Method.GET);
        var response = client.Execute<List<UserViewModel>>(request);
        var userlist = response.Data;

    }

и получить ответ от контроллера Web API. код

 [HttpGet]
[Authorize]
    [Route("GetAllEmployeeList")]
    public HttpResponseMessage GetAllEmployeeList()
    {
        using (DbProjectsEntities db = new DbProjectsEntities())
        {
            var userlist = db.sp_GetUsersList().ToList();
            HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, userlist);
            return response;
        }
    }

Как сохранить токен для получения списка сотрудников При использовании атрибута авторизации. а также по истечении срока действия токена перейдите на страницу входа.

...