C# 正在获取标识资源-标识服务器4
我是Identity Server 4的新手,正在努力获取用户的身份。目前,我正在通过Identity Server保护的API显示C# 正在获取标识资源-标识服务器4,c#,.net,asp.net-core,identityserver4,C#,.net,Asp.net Core,Identityserver4,我是Identity Server 4的新手,正在努力获取用户的身份。目前,我正在通过Identity Server保护的API显示声明: namespace API01.Controllers { [Route("identity")] [Authorize] public class IdentityController : ControllerBase { // GET identity [HttpGet] p
声明
:
namespace API01.Controllers
{
[Route("identity")]
[Authorize]
public class IdentityController : ControllerBase
{
// GET identity
[HttpGet]
public IActionResult Get()
{
return new JsonResult(from c in User.Claims select new { c.Type, c.Value });
}
}
}
这方面的问题是,当我解码jwt
时,email
资源只是显示为值email
"scope": [
"email",
"openid",
"api1"
],
我一直在尝试使用User.identifies
,但到目前为止,我无法从allowedscope{“email”、“openid”、“api1”}
中获得所需的信息
基本上,我想要得到的值在我的例子中是
test@test.com
。我不担心返回一个JsonResult
,只要一个字符串就足够了,如果它很困难的话。范围数组指示允许访问的内容。
您可能希望在令牌中看到电子邮件声明
为此,您需要实现
IProfilrService
,并将Subject
中的所有声明添加到IssuedClaims
范围数组指示允许访问的内容。
您可能希望在令牌中看到电子邮件声明
为此,您需要实现
IProfilrService
,并将Subject
中的所有声明添加到IssuedClaims
如果您想将电子邮件声明包括在您的id令牌中,您可以在IDS4的IdentityResources
中添加IdentityResources.email()
public static IEnumerable<IdentityResource> GetIdentityResources()
{
return new List<IdentityResource>
{
new IdentityResources.OpenId(),
new IdentityResources.Profile(),
new IdentityResources.Email()
};
}
你可以从一开始
如果您想在jwt令牌中找到作用域
,id令牌将不包括作用域
声明,但访问令牌包括,因为api应该验证它 如果要在id令牌中包含电子邮件声明,可以在IDS4的IdentityResources
中添加IdentityResources.email()
:
public static IEnumerable<IdentityResource> GetIdentityResources()
{
return new List<IdentityResource>
{
new IdentityResources.OpenId(),
new IdentityResources.Profile(),
new IdentityResources.Email()
};
}
你可以从一开始
如果您想在jwt令牌中找到作用域
,id令牌将不包括作用域
声明,但访问令牌包括,因为api应该验证它 感谢您的回复,我并不担心它会显示在令牌中,只是更感兴趣的是在我的API的Get()
方法中获取它,并用它做一些事情。是的,但是是什么让用户产生了所有的声明呢?它是中间件API吗?从代币上?它是否包含您需要的声明;-)我有一个令牌服务器(WebAPI),一个带有中间件的WebAPI,还有一个控制台应用程序作为客户端。你有一个例子,因为我不太清楚这里需要什么。谢谢,令牌服务器是Identity server 4吗?是的,这是Identity Server 4感谢您的回复,我并不担心它显示在令牌中,只是更感兴趣的是在我的API的Get()
方法中获取它,并用它做一些事情。是的,但是什么创造了用户及其所有声明?它是中间件API吗?从代币上?它是否包含您需要的声明;-)我有一个令牌服务器(WebAPI),一个带有中间件的WebAPI,还有一个控制台应用程序作为客户端。你有一个例子,因为我不太清楚这里需要什么。谢谢,令牌服务器是Identity server 4吗?是的,是Identity Server 4感谢您的回答,我已经尝试了上述方法,但仍然无法从令牌或操作方法的jsonResult
访问电子邮件的实际值。我已经开始快速入门,我是第2名GrantTypes.ResourceOwnerPassword
,这可能是一个问题,因为我注意到您有GrantTypes.HybridAndClientCredentials
。那么,我只是想澄清一下,我收到的是一个ID令牌还是一个访问令牌?正如我所读到的,后者不包含这样的信息?使用混合流或资源所有者流不是问题。如果您获得API访问权,那么您将获得id令牌和访问令牌。ID令牌声明将映射到用户原则,您可以通过用户退出。声明获得答案,我已尝试了上述方法,但仍然无法从令牌或操作方法的jsonResult
访问电子邮件的实际值。我已经开始快速入门,我是第2名GrantTypes.ResourceOwnerPassword
,这可能是一个问题,因为我注意到您有GrantTypes.HybridAndClientCredentials
。那么,我只是想澄清一下,我收到的是一个ID令牌还是一个访问令牌?正如我所读到的,后者不包含这样的信息?使用混合流或资源所有者流不是问题。如果您获得API访问权,那么您将获得id令牌和访问令牌。ID令牌声明将映射到用户原则,您可以按用户退出该原则。声明请在添加新用户时确认您是否将声明映射到用户(即AspNetuserClaims表)。是的,我是,但我刚才注意到了一点。。。我正在将索赔
映射到用户
,但我没有使用索赔=new[]{new“索赔1”、new“索赔2”、…}
,我的是索赔={new“索赔1”、new“索赔2”、…}
。我不确定这是否重要。当我有时间时将进行测试,因为我正在阅读文档中的Quickstart 3。请确认您在添加新用户时是否正在与用户(即AspNetuserClaims表)映射声明。是的,但我刚才注意到了一点。。。我正在将索赔
映射到用户
,但我没有使用索赔=new[]{new“索赔1”、new“索赔2”、…}
,我的是索赔={new“索赔1”、new“索赔2”、…}
。我不确定这是否重要。我将在有时间的时候进行测试,因为我正在阅读文档中的Quickstart 3。