Я отправляю учетные данные в 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;
}
}
Как сохранить токен для получения списка сотрудников При использовании атрибута авторизации. а также по истечении срока действия токена перейдите на страницу входа.