Dav*_*ave 1 asp.net-core-mvc identityserver4 asp.net-core-webapi
我正在设法绕过oAuth2 / IdentityServer4。
在https://github.com/IdentityServer/IdentityServer4.Samples/tree/dev/Quickstarts/3_ImplicitFlowAuthentication使用示例应用程序
MVC应用程序中的以下代码:
@foreach (var claim in User.Claims)
{
<dt>@claim.Type</dt>
<dd>@claim.Value</dd>
}
Run Code Online (Sandbox Code Playgroud)
返回似乎是身份令牌声明的内容
NBF
1467173142
EXP
1467173442
ISS
的http://本地主机:5000
澳元
MVC
现时
636027699106782287.MDI0YzI5MTQtYmQxNy00MDllLWJmYzQtZjBhYzI2MGNjYmE3MDFmNzg1YmUtM2Y5ZC00YjBiLWEzOGItN2Q3ODRiODJlYjFl
IAT
1467173142
c_hash
H2i5QeJKlHM5-s8vUTYlOw
SID
42b58d38e2b7c6cc653492742a08840b
子
818727
auth_time
1467170555
IDP
idsvr
名
爱丽丝·史密斯
GIVEN_NAME
爱丽丝
FAMILY_NAME
史密斯
网站
http://alice.com
AMR
PWD
API项目中的以下代码
var claims = User.Claims.Select(c => new { c.Type, c.Value });
return new JsonResult(claims);
Run Code Online (Sandbox Code Playgroud)
返回似乎是访问令牌声明的内容
{
"Type": "nbf",
"Value": "1467173142"
},
{
"Type": "exp",
"Value": "1467176742"
},
{
"Type": "iss",
"Value": "http://localhost:5000"
},
{
"Type": "aud",
"Value": "http://localhost:5000/resources"
},
{
"Type": "client_id",
"Value": "mvc"
},
{
"Type": "scope",
"Value": "openid"
},
{
"Type": "scope",
"Value": "profile"
},
{
"Type": "scope",
"Value": "api1"
},
{
"Type": "sub",
"Value": "818727"
},
{
"Type": "auth_time",
"Value": "1467170555"
},
{
"Type": "idp",
"Value": "idsvr"
}
Run Code Online (Sandbox Code Playgroud)
注意,代码本质上是相同的(用户身份原则中的返回声明),并且缺少名称/电子邮件,但在API示例中包括了范围声明。
令牌流本质上是IdentityServer4 => MVC Project => API Project。显然,MVC项目同时具有identityToken和访问令牌,但不会加载访问令牌int User.Claims。
我的目标是使范围声明在MVC项目的“用户”中可用,以便我可以设置策略以使我的MVC方法中的“授权”属性部分起作用。
API项目的启动位于:https : //github.com/IdentityServer/IdentityServer4.Samples/blob/dev/Quickstarts/3_ImplicitFlowAuthentication/src/Api/Startup.cs
MVC项目的启动位于:https : //github.com/IdentityServer/IdentityServer4.Samples/blob/dev/Quickstarts/3_ImplicitFlowAuthentication/src/Api/Startup.cs
谢谢,戴夫
这个问题是无效的,但我将在这里保留其原因以及节省他人时间的解决方案。
首先,有两个令牌用于两个不同的目的。
访问令牌:描述客户端,即使用API的软件。此处的任何声明均授权客户端访问API端点。
身份令牌:这描述了用户或使用使用该API的软件的人员。
最初的问题是询问如何在身份令牌中查看与客户相关的范围,这显然是无效的。
但是,您可以在Identity令牌中包括Identity范围。
为此,将Type设置为ScopeType.Resource并将IncludeAllClaimsForUser设置为true,如下所示
new Scope()
{
Name = "ManageUsers",
IncludeAllClaimsForUser = true,
Type = ScopeType.Resource
},
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3477 次 |
| 最近记录: |