在SPA应用程序中正确使用ASP.NET 5中的AntiForgery令牌?

时间:2015-12-16 16:21:05

标签: c# asp.net-core single-page-application antiforgerytoken

在SPA应用程序的早期版本中,AntiForgey令牌的想法如下:

  • 在页面上添加__RequestVerificationToken
  • ValidateJsonAntiForgeryTokenAttribute添加到请求
  • ovverride AuthorizeAttribute为asp-anti-forgerytaghelper

我不太了解ASP.NET 5中的授权要求(是否有一些好的信息源?)但看起来新行为应该是这样的:

  • 添加__RequestVerificationToken
  • class PeakClass { static int CurrentProcessID = 0000; private static void Main(string[] args) { //Basically gets your default audio device and session attached to it using (var sessionManager = GetDefaultAudioSessionManager2(DataFlow.Render)) { using (var sessionEnumerator = sessionManager.GetSessionEnumerator()) { //This will go through a list of all processes uses the device //the code got two line above. foreach (var session in sessionEnumerator) { //This block of code will get the peak value(value needed for VU Meter) //For whatever process you need it for (I believe you can also check by name //but I found that less reliable) using (var session2 = session.QueryInterface<AudioSessionControl2>()) { if(session2.ProcessID == CurrentProcessID) { using (var audioMeterInformation = session.QueryInterface<AudioMeterInformation>()) { Console.WriteLine(audioMeterInformation.GetPeakValue()); } } } //Uncomment this block of code if you need the peak values //of all the processes // //using (var audioMeterInformation = session.QueryInterface<AudioMeterInformation>()) //{ // Console.WriteLine(audioMeterInformation.GetPeakValue()); //} } } } } private static AudioSessionManager2 GetDefaultAudioSessionManager2(DataFlow dataFlow) { using (var enumerator = new MMDeviceEnumerator()) { using (var device = enumerator.GetDefaultAudioEndpoint(dataFlow, Role.Multimedia)) { Console.WriteLine("DefaultDevice: " + device.FriendlyName); var sessionManager = AudioSessionManager2.FromMMDevice(device); return sessionManager; } } } } 添加到请求
  • 这里应该是新要求。

问题是:如何编写此新授权要求并删除标准要求?有人可以提供一些建议或指点我的一些例子吗? 感谢

1 个答案:

答案 0 :(得分:1)

使用MVC6,如果你使用这样的东西:

<form asp-controller="Account" 
      asp-action="Login">
</form>

您将自动获得:

<form action="/Account/Login" method="post">
    <input name="__RequestVerificationToken" type="hidden" value="....">
</form>
仅当您要停用该行为时,才会使用

asp-antiforgery

对于验证本身,当您在app.AddMvc(...)ConfigureServices方法中执行Configure时,会添加该验证。

事实上,有一些东西正在被添加,如果你很好奇,你可以check out the code

如果你真的要使用从一个Action生成这个,那么你可以拥有一个依赖IHtmlGenerator的控制器并以这种方式生成你的令牌。