- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
研究身份提供者的概念证明,需要帮助理解 aspnet 身份的一些细微差别,特别是与用户声明相关的。
我想要完成的事情:
1) 公开一个 MVC 应用程序,该应用程序提供对 2 个微服务之一的安全访问,这些微服务将公开体育和运动员数据。
2) 允许本地用户帐户和外部帐户(如 google 或 facebook auth)。
当前设置:
1) 利用 Identity Server 4 进行身份验证的 Asp.Net MVC 应用程序。
2) 两个 Web Api 2 网络服务(1 个用于运动,1 个用于运动员)。体育 API 不安全……即……开放 API。运动员 API 应该通过基于策略的授权来保护。
3) Identity Server 4 Web 应用程序,通过 IdentityServer4 nuget 包利用 Entity Framework 和 ASP.NET Identity。
4) SQL Server 数据库“完全”配置为 api 资源、身份资源、客户端、几个具有不同角色和声明的测试用户进行测试。
目前有效:
1)所有用户都可以登录(本地和谷歌)
2) 声明似乎按我的预期加载(仍在努力理解 Identity Server 数据模型中声明表的所有关系)。
3) MVC 应用程序显示 id_token、access_token、refresh_token,然后循环遍历用户的声明并显示它们。
什么不起作用:
1) 并非我认为应该在 mvc 应用程序中显示的所有声明都实际显示。
我的意思的例子:
1) 在下面的第一个屏幕截图中,您可以看到 given_name 和 family_name 作为用户“bob”的声明。这是在 MVC razor 中使用以下代码片段显示的:
@if (User.Identities.First().IsAuthenticated)
{
<h1>Tokens:</h1>
<dt>id token</dt>
<dd>@await ViewContext.HttpContext.GetTokenAsync("id_token")</dd>
<dt>access token</dt>
<dd>@await ViewContext.HttpContext.GetTokenAsync("access_token")</dd>
<dt>refresh token</dt>
<dd>@await ViewContext.HttpContext.GetTokenAsync("refresh_token")</dd>
<br />
<h1>Claims:</h1>
<dl>
@foreach (var claim in User.Claims)
{
<dt>@claim.Type : @claim.Value</dt>
}
</dl>
}
context.AddRequestedClaims(claims);
最佳答案
终于弄清楚我错过了什么。客户端应用程序负责在连接 openid 中间件时设置 OpenIdConnect 选项。选项对象的属性之一称为“ClaimActions”。这些声明操作允许客户端连接自定义映射属性。这是 ClaimsActions.MapJsonKey 属性/方法组合的文档:
https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/additional-claims?view=aspnetcore-2.2#map-user-data-keys-and-create-claims
这是我添加到我的客户端启动类中的代码,以使其适用于一组自动序列化的声明。
services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies")
.AddOpenIdConnect("oidc", options =>
{
options.SignInScheme = "Cookies";
options.Authority = "http://localhost:5000";
options.RequireHttpsMetadata = false;
options.ClientId = "mvc";
options.ClientSecret = "secret";
options.ResponseType = "code id_token";
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
options.Scope.Add("athlete.full");
options.Scope.Add("rights");
options.Scope.Add("email");
options.Scope.Add("address");
options.Scope.Add("phone");
options.Scope.Add("offline_access");
// These are what allowed the claims to be serialized for front-end consumption.
options.ClaimActions.MapJsonKey(JwtClaimTypes.WebSite, "website");
options.ClaimActions.MapJsonKey(JwtClaimTypes.Gender, "gender");
options.ClaimActions.MapJsonKey(JwtClaimTypes.BirthDate, "birthdate");
});
关于c# - AspNet 用户声称丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57434260/
我正在尝试解决为什么 Ruby 没有用空格分割我的字符串。例如: [1] pry(#)> msg => "!iex [email protected]|[email protected]> Firs
我正在尝试解决为什么 Ruby 没有用空格分割我的字符串。例如: [1] pry(#)> msg => "!iex [email protected]|[email protected]> Firs
这是我的 API 端点: [HttpPost] public int Post(SearchHistory searchHistory) { IDashboardRepository dash
我正在按照these guidelines验证来自Facebook API的signed_request参数。 ,但我在调用 Commons Codec 中的 Base64 类的某些方法时遇到了问题。
我有一个 json 结构数组: { data : [ { "num" : val , "time" : val } , ... ] } 我需要找到 num 的最大值和最短/最长时间,以及将对象移动到
我使用 Xcode 的 Refactor > Rename 命令尝试重命名 C 中的方法参数 this。 它声称 this 是“保留语言关键字”,但据我所知,事实并非如此。 这是 Xcode 中的错误
有人刚刚给我看了 A byte of Python 的旧 PDF 版本.根据本身,它是 3.0 版(本书的,而不是 Python 的),从 2014 年开始。在 Operators 部分, 有一个部分
问题: 您在 Intellij 中使用 VCS 系统并尝试提交内容。提交失败,Intellij 声称 index.lock 存在。你检查你的 repo 目录中的 .git/index.lock,发现它
我有以下 SAM 模板: AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Descriptio
这可能看起来微不足道,但我使用 Excel 来操作程序中的一些数据,然后以 tsv 格式输出数据。我想用 gnuplot 来绘制它,其复杂性不比 plot "filename" 复杂,但 gnuplo
我正在使用嵌入式 Jetty 启动标准 Java 网络应用程序。我的启动器是这样的: import org.eclipse.jetty.server.Server; import org.eclips
我正在阅读 Joshua Bloch 的 Effective Java,第 2 版,第 11 条:明智地覆盖克隆。 在第 56 页,他试图解释当我们重写某些类(如集合类)的 clone() 时,我们必
问题: 如 Fusion Location Provider API 所声称的,位置更新在室内不起作用。 发生了什么: 我尝试在我的 Android 应用程序中使用 LocationClient 实现
所以我只是尝试使用 NDK 构建一个库。我相信 Android.mk 和 Application.mk 文件是正确的,但它们是否正确无关紧要。 在NDK目录下执行make APP=hello时 And
我在 Android Studio 中尝试为我的模拟器安装 HAXM 时遇到了困难。我有一台 hp2000 笔记本;我将 Windows 8.1 更新到 Windows 8.1 Pro 以激活 Hyp
在我的程序中,我正在下载 misc。 PDF 文档,最后我想使用 Apache pdfbox (v1.8.8) 将它们合并到一个组合文档中。出于某种奇怪的原因,PDFMergerUtility 未能声
我正在尝试使用预先编写的接口(interface)编写队列类。接口(interface)包含方法 public void enqueue(T element); 我的类(class)看起来像 impo
有这样的东西: $(document).ready(function() { $("#myTable").dataTable({
我最近将一个 Android 应用程序从 Eclipse 移植到 Android Studio。我能够调试应用程序,甚至能够构建一个供客户端测试的发布版本。不幸的是,我不能再调试了。当我尝试从 And
每次,我在 Gerrit 中看到我的更改的 merged 状态并且我执行 git pull origin,我可以清楚地看到,我的更改/分支实际上没有已 merge 到 master 中。 请检查我的
我是一名优秀的程序员,十分优秀!