我正在尝试设置 Thinktecture 的 Identity Server 3,但在交换授权代码时(或使用 ResourceOwner 流时,我似乎无法让它返回刷新令牌,但我将专注于授权代码因为它现在对我更重要)。我取回了访问令牌并可以很好地使用它们进行身份验证,但它似乎甚至没有生成我期望取回的刷新令牌。为了让 Identity Server 返回刷新令牌,我需要做些什么特别的事情吗?
我已经查看了文档,但没有看到我设置错误的任何内容,并且我没有做的关于刷新令牌的页面上唯一我没有做的事情是在发送用户时明确请求“offline_access”范围在那里进行身份验证,因为每当我尝试时,都会收到“无效范围”错误。因此,我将 Thinktecture 的“请求 offline_access 范围(通过代码或资源所有者流程)”的措辞表示,offline_access 范围是根据您使用的流程自动请求的。
我一直在尝试尽可能地遵循他们的示例应用程序(以及Katana Project中现有 Owin 中间件的源代码),我的设置如下:
- 我使用他们的客户端类创建了一个客户端,手动指定以下内容:
var 客户端 = 新客户端() { ClientId = "SomeId", ClientName = "具有身份验证代码流的客户端", RequireConsent = false, //将此设置为 true 没有帮助 Flow = Flows.AuthorizationCode, ClientSecrets = 新列表() { 新客户秘密(“秘密”) }, RedirectUris = 新列表() { “本地主机:/特定重定向路径” } };
- 我正在调用授权端点,如下所示:
var 授权端点 = AuthorizationEndpointBase + "?client_id=" + Uri.EscapeDataString(Options.ClientId) + "&范围=默认" + "&response_type=代码" + "&redirect_uri=" + Uri.EscapeDataString(redirectUri) + "&state=" + Uri.EscapeDataString(state); Response.Redirect(authorizationEndpoint);
其中“默认”是我创建的范围。 - 在我的回调中,我按如下方式调用令牌端点:
IReadableStringCollection 查询 = Request.Query; string code = getValueFromQueryString("code", query); var tokenRequestParameters = 新列表>() { 新的 KeyValuePair("client_id", Options.ClientId), 新的 KeyValuePair("redirect_uri", GenerateRedirectUri()), 新的 KeyValuePair("client_secret", Options.ClientSecret), 新的 KeyValuePair(“代码”,代码), 新的 KeyValuePair("grant_type", "authorization_code"), }; var requestContent = new FormUrlEncodedContent(tokenRequestParameters); HttpResponseMessage 响应 = 等待 _httpClient.PostAsync(TokenEndpoint, requestContent, Request.CallCancelled); response.EnsureSuccessStatusCode(); 字符串 oauthTokenResponse = 等待 response.Content.ReadAsStringAsync();
当我调用令牌端点时,我在 Identity Server 上的登录会显示以下内容(在验证授权码之后):
iisexpress.exe 信息:0 : [Thinktecture.IdentityServer.Core.Validation.TokenRequestValidator]: 7/13/2015 1:44:07 PM +00:00 -- 令牌请求验证成功 { "ClientId": "SomeId", "ClientName": "具有身份验证代码流的客户端", "GrantType": "授权码", “授权码”:“f8f795e649044067ebd96a341c5af8c3” } iisexpress.exe 信息:0:[Thinktecture.IdentityServer.Core.ResponseHandling.TokenResponseGenerator]:7/13/2015 1:44:07 PM +00:00 -- 创建令牌响应 iisexpress.exe 信息:0 : [Thinktecture.IdentityServer.Core.ResponseHandling.TokenResponseGenerator]: 7/13/2015 1:44:07 PM +00:00 -- 处理授权码请求 调试:[Thinktecture.IdentityServer.Core.Services.Default.DefaultTokenService]:7/13/2015 1:44:07 PM +00:00 -- 创建访问令牌 调试:[Thinktecture.IdentityServer.Core.Services.Default.DefaultTokenService]:7/13/2015 1:44:07 PM +00:00 -- 创建参考访问令牌 iisexpress.exe 信息:0:[Thinktecture.IdentityServer.Core.Endpoints.TokenEndpointController]:7/13/2015 1:44:07 PM +00:00 -- 结束令牌请求 iisexpress.exe 信息:0:[Thinktecture.IdentityServer.Core.Results.TokenResult]:7/13/2015 1:44:07 PM +00:00 -- 返回令牌响应。
我不确定还有什么相关的,所以我会根据需要提供更多信息。