我正在尝试设置一次性链接身份验证方法。我的Auth / Index中有一个初始表单,用户输入他们的用户名和密码。这会生成一个UID并将其传递给另一个视图
@model Hsbc.Marketing_Awards.Website.Models.AuthModel
<h2>EnterAuthenticationLink</h2>
@using(Html.BeginForm("AuthorizeOneTimeLink", "Auth", FormMethod.Post))
{
@Html.LabelFor(m => m.EmailAddress, "Enter one time link")
@Html.TextBoxFor(m => m.AuthenticationUrl, new { Name = "authenticationUrl" })
<input type="submit" value="Submit"/>
}
我想提交此表单,但不断重定向到我的Auth / Index视图。我假设这是因为我需要在我的web.config中授权视图,但我已经尝试过这样做,但它似乎不起作用。
<system.web>
<httpCookies httpOnlyCookies="true"/>
<authentication mode="Forms">
<forms loginUrl="Auth" timeout="30" slidingExpiration="true" defaultUrl="Home/Index"/>
</authentication>
</system.web>
<location path="Views/Auth/EnterAuthenticationLink.cshtml">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
<location path="Views/Auth">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
我正试图访问的方法是
[HttpPost]
public ActionResult AuthorizeOneTimeLink(string authenticationUrl)
{
// Authorise link
}
如果我将“AuthorizeOneTimeLink”操作名称更改为Index(因此控制器上有2个Index操作),请将FormMethod更改为FormMethod.Get(并将我的新索引操作中的属性更改为[HttpGet])然后有效,但不会通过渗透测试。
答案 0 :(得分:0)
我现在明白了这个问题。它必须是HttpGet(并将通过测试),因为它是发送给用户的一次性链接。用户必须单击链接将参数传递给应用程序。这必须使用HttpGet而不是HttpPost来完成。