【发布时间】:2019-07-12 22:09:35
【问题描述】:
我们将 IdentityServer4 用于 IdentityServer,将 IdentityServer3 用于客户端 (ASP.NET MVC 5)。
一切正常(通过 OWIN 正确设置了用户/声明原则),但我无法从用户那里获取访问令牌。
我们正在使用可以访问这些范围的隐式客户端:openid, profile, testapi
Startup.cs:
app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
{
Authority = identityServerUrl,
RequiredScopes = new[] { "testapi" },
});
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "Cookies",
});
app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
Authority = identityServerUrl,
ClientId = "testclient",
Scope = "openid profile testapi",
RedirectUri = "http://localhost:49000/signin-oidc",
ResponseType = "id_token token",
SignInAsAuthenticationType = "Cookies",
});
检索访问令牌的代码(在其中一个控制器内):
var user = User as ClaimsPrincipal;
var token = user.FindFirst("access_token");
用户设置正确,但令牌为空。我猜这是我在 startup.cs 中缺少的某种选项,但是哪个?
【问题讨论】:
-
我不熟悉身份服务器,但乍一看您发布的代码中的名称(
user.FindFirst("access_token"),更具体地说是FindFirst),似乎无论从哪个位置提取令牌可能没有 - 也许需要生成令牌并且该方法只检索它们? -
不
FindFirst搜索声明? -
@zero 令牌是在 IdentityServer 上生成的,如果我正确设置了参数(我认为这是问题所在),应该发送给客户端。
-
@john 确实如此,是的。
-
@Goblin 我的意思是,你为什么期望在声明中找到
access_token?
标签: c# asp.net-mvc oauth identityserver4 identityserver3