对于使用混合授权类型的客户端,IdentityServer4 的有效 grant_type 值是多少?
What are the valid grant_type values for IdentityServer4 with a Client using Hybrid grant type?
我使用的是 IdentityServer4 包的版本 1.0.0。
"IdentityServer4": "1.0.0"
我创建了一个客户端
new Client
{
ClientId = "MobleAPP",
ClientName = "Moble App",
ClientUri= "http://localhost:52997/api/",
AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,
ClientSecrets =
{
new Secret("SecretForMobleAPP".Sha256())
},
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
"api"
},
AllowOfflineAccess = true
}
还有 scope/ApiResources
public static IEnumerable<ApiResource> GetApiResources()
{
return new List<ApiResource>
{
new ApiResource("api", "My API")
};
}
与以下user/TestUser
public static List<TestUser> GetUsers()
{
return new List<TestUser>
{
new TestUser
{
SubjectId = "2",
Username = "bob",
Password = "password",
Claims = new []
{
new Claim(JwtClaimTypes.Name, "Bob Smith")
}
}
};
}
我正在尝试测试我从 Postman 设置的 IdentityServer 并确定 grant_type 键值对的可能值。
当我将 grant_type 设置为 client_credentials 时我可以成功连接并且不确定 grant_type 值是否有其他选项。
Working Postman configuration with grant_type set to client_credentials
简答
client_credentials
是唯一的 grant_type
值,您可以在同时使用混合和客户端凭据授权类型时 直接针对令牌端点 使用。
更长的答案
客户端凭据授权类型是唯一允许您直接访问令牌端点的类型,这就是您在 Postman 示例中所做的。在那种情况下,身份验证是针对客户端本身完成的 - 即您注册的应用程序。
当您使用混合授权类型时,将针对 end-user - 使用您的应用程序的用户进行身份验证。在这种情况下,您不能直接点击端点令牌,但必须向 IdentityServer 发出 authorization request。
这样做时,您不会使用 grant_type
参数,而是使用 response_type
参数来指示 IdentityServer 您期望返回的内容。
当您使用混合授权类型时 response_type
的可能值可以在 in IdentityServer constants 中找到 - 它们是字典中的最后 3 项:
code id_token
,这将return一个授权码和一个身份令牌
code token
、return获取授权码和访问令牌
code id_token token
,给你一个授权码,一个身份令牌和一个访问令牌
获得授权码后,您将能够通过访问令牌端点将其交换为访问令牌,并可能是刷新令牌。
我使用的是 IdentityServer4 包的版本 1.0.0。
"IdentityServer4": "1.0.0"
我创建了一个客户端
new Client
{
ClientId = "MobleAPP",
ClientName = "Moble App",
ClientUri= "http://localhost:52997/api/",
AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,
ClientSecrets =
{
new Secret("SecretForMobleAPP".Sha256())
},
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
"api"
},
AllowOfflineAccess = true
}
还有 scope/ApiResources
public static IEnumerable<ApiResource> GetApiResources()
{
return new List<ApiResource>
{
new ApiResource("api", "My API")
};
}
与以下user/TestUser
public static List<TestUser> GetUsers()
{
return new List<TestUser>
{
new TestUser
{
SubjectId = "2",
Username = "bob",
Password = "password",
Claims = new []
{
new Claim(JwtClaimTypes.Name, "Bob Smith")
}
}
};
}
我正在尝试测试我从 Postman 设置的 IdentityServer 并确定 grant_type 键值对的可能值。
当我将 grant_type 设置为 client_credentials 时我可以成功连接并且不确定 grant_type 值是否有其他选项。
Working Postman configuration with grant_type set to client_credentials
简答
client_credentials
是唯一的 grant_type
值,您可以在同时使用混合和客户端凭据授权类型时 直接针对令牌端点 使用。
更长的答案
客户端凭据授权类型是唯一允许您直接访问令牌端点的类型,这就是您在 Postman 示例中所做的。在那种情况下,身份验证是针对客户端本身完成的 - 即您注册的应用程序。
当您使用混合授权类型时,将针对 end-user - 使用您的应用程序的用户进行身份验证。在这种情况下,您不能直接点击端点令牌,但必须向 IdentityServer 发出 authorization request。
这样做时,您不会使用 grant_type
参数,而是使用 response_type
参数来指示 IdentityServer 您期望返回的内容。
当您使用混合授权类型时 response_type
的可能值可以在 in IdentityServer constants 中找到 - 它们是字典中的最后 3 项:
code id_token
,这将return一个授权码和一个身份令牌code token
、return获取授权码和访问令牌code id_token token
,给你一个授权码,一个身份令牌和一个访问令牌
获得授权码后,您将能够通过访问令牌端点将其交换为访问令牌,并可能是刷新令牌。