- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在我的 MVC 5 网络应用程序中,我有这个(在 AccountController.cs 中):
// Used for XSRF protection when adding external sign ins
private const string XsrfKey = "XsrfId";
和
public string SocialAccountProvider { get; set; }
public string RedirectUri { get; set; }
public string UserId { get; set; }
public override void ExecuteResult(ControllerContext context)
{
var properties = new AuthenticationProperties { RedirectUri = RedirectUri };
if (UserId != null)
{
properties.Dictionary[XsrfKey] = UserId;
}
context.HttpContext.GetOwinContext().Authentication.Challenge(properties, SocialAccountProvider);
}
它究竟是如何用于保护的?
我应该将 XsrfKey 的值设置为更随机的值吗?
最佳答案
看看ManageController
方法 LinkLogin
和 LinkLoginCallback
:
//
// POST: /Manage/LinkLogin
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LinkLogin(string provider)
{
// Request a redirect to the external login provider to link a login for the current user
return new AccountController.ChallengeResult(provider, Url.Action("LinkLoginCallback", "Manage"), User.Identity.GetUserId());
}
//
// GET: /Manage/LinkLoginCallback
public async Task<ActionResult> LinkLoginCallback()
{
var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(XsrfKey, User.Identity.GetUserId());
if (loginInfo == null)
{
return RedirectToAction("ManageLogins", new { Message = ManageMessageId.Error });
}
var result = await UserManager.AddLoginAsync(User.Identity.GetUserId(), loginInfo.Login);
return result.Succeeded ? RedirectToAction("ManageLogins") : RedirectToAction("ManageLogins", new { Message = ManageMessageId.Error });
}
这些是处理外部帐户(即 Google、Facebook 等)链接的方法。流程是这样的:
LinkLogin
方法。LinkLogin
返回 ChallengeResult
对象,回调 url 设置为 LinkLoginCallback
方法。ChallengeResult.ExecuteResult
由 MVC 框架调用,调用 IAuthenticationManager.Challenge
,这会导致重定向到特定的外部登录提供程序(比方说:google)。 LinkLoginCallback
处理.在这里,我们要防止 XSRF 并验证调用是由用户从我们服务器提供的页面(而不是某些恶意站点)发起的。 通常,如果它是一个简单的 GET-POST 序列,您会添加一个隐藏的 <input>
带有防伪 token 的字段并将其与相应的 cookie 值进行比较(这就是 Asp.Net Anti-Forgery Tokens 的工作方式)。
此处,请求来自外部身份验证提供商(在我们的示例中为 google)。所以我们需要将防伪 token 交给谷歌,谷歌应该将其包含在回调请求中。这正是state parameter在 OAuth2 中专为。
回到我们的XsrfKey
:你输入的所有内容 AuthenticationProperties.Dictionary
将被序列化并包含在 state
中OAuth2 请求的参数 - 因此,OAuth2 回调。现在,GetExternalLoginInfoAsync(this IAuthenticationManager manager, string xsrfKey, string expectedValue)
将寻找 XsrfKey
在接收状态字典中并将其与 expectedValue
进行比较.它将返回 ExternalLoginInfo
仅当值相等时。
因此,回答您最初的问题:您可以设置 XsrfKey
任何你想要的,只要在设置和读取时使用相同的键。将它设置为任何随机值没有多大意义 - state
参数是加密的,因此没有人期望您无论如何都能读取它。
关于asp.net-mvc-5 - XsrfKey 的用途是什么?我应该将 XsrfId 设置为其他值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49606527/
XML可以应用于 WEB 开发的许多方面,常用于简化数据的存储和共享 XML 把数据从 HTML 分离 现在的HTML 文档一般都是显示动态数据,每当数据改变时将花费大量的时间来编辑 HTML
在类(class)(方案)中,我们最近学习了允许函数接受任意数量参数的语法,例如; (define len (lambda args (length args))) >(len 1 2 3
在 redis-cli 中执行 info 命令时,会列出与该服务器相关的所有信息。 “evicted_keys”的目的是什么? 最佳答案 Redis 可以配置为根据需要自动清除键。如果这样配置,red
golang 空结构体 struct{} 可以用来节省内存 ? 1
有人可以解释一下资源文件夹中的 Info.plist 是什么吗?我如何在我的应用程序中使用它?提前致谢。 最佳答案 您可以在Info.plist文件中为所有类型的设备指定不同的常规资源和应用程序配置,
我需要减小可执行文件的大小,并且经常在我的可执行文件中将某些“不必要的” uses占用一定的大小。 例如: Unit1连接到Unit2,但是两个单元的导入为“ System.SysUtils”。 然后
我是 OOP 的新手。虽然我了解多态是什么,但我无法真正使用它。我可以有不同名称的函数。为什么我应该尝试在我的应用程序中实现多态性。 最佳答案 在严格类型化的语言中,多态性对于拥有不同类型对象的列表/
Possible Duplicate: What is the difference between a delegate and events? Possible Duplicate: Differ
这个问题在这里已经有了答案: Custom index.html javadoc page? (2 个答案) 关闭 7 年前。 我使用的是eclipse。一般情况下我们可以使用javadoc.exe
你能解释一下吗ValidateAntiForgeryToken目的并向我展示有关 MVC 4 中的 ValidateAntiForgeryToken 的示例? 我找不到任何解释此属性的示例? 最佳答案
我正在学习 RxSwift 并试图了解 Observable 和 PublishSubject aka Sequence 之间的主要区别。 据我了解,Sequences/PublishesSubjec
有时有人说,在使用 Azure 表时,实际上存在第三个关键分区数据 - 表名称本身。 我在执行分段查询时注意到 TableContinuationToken 有一个 NextTableName 属性。
在Apple提供的aurioTouch项目中,听说在performRender()函数下的AudioController文件中的AudioBufferList ioData携带了mic到音频播放器的音
MSDN 文档没有详细解释它的用途。 由于它是可选的,我几乎假设它类似于某种元数据。 我现在如何看待它,我想用它来为特定用户指定缓存,例如: new CacheItem(key: "keyName",
我正在学习 browserify,我正在尝试用它做两件基本的事情: 转换(通过 shim)非 CommonJS 模块以实现易用性和依赖跟踪 捆绑项目特定的库 我找到了一个工作流程,说明如何使用 Gul
我通过按 CTRL + C 访问 eix 1.8.2 的 Break 菜单。它看起来像这样: BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
在 codeLabs 教程(Android - Kotlin - Room with a View)中,他们使用“viewModelScope.launch(Dispatchers.IO)”来调用插入
我通过按 CTRL + C 访问 eix 1.8.2 的 Break 菜单。它看起来像这样: BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
请耐心等待,因为我没有太多地使用压缩算法,所以这对你们中的一些人来说可能是显而易见的。当某些流媒体视频开始滞后时,我总是注意到这一点。当我看到这个问题时我才意识到我很好奇: Twitter image
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 3 年前。 Improv
我是一名优秀的程序员,十分优秀!