Unauthorised client when requesting for token using IdentityServer4 .NET Core 3.1

﹥>﹥吖頭↗ 提交于 2020-06-01 07:39:29

问题


I'm trying to get IdentityServer4 to work but unfortunately no luck. I'll explain the issue in more detail. I'm using IdentityServer4 and also .NET core Identity. I have a .net core mvc application which has login page. You basically login with username and password. When you login I need to generate jwt token I'm doing this using the following code:

[HttpGet]
        public async Task<IActionResult> GetClientToken(string clientId, string clientSecret, string grantType, string scope, string username, string password)
        {
            var serverClient = HttpClientFactory.CreateClient();
            var discoveryDocument = await serverClient.GetDiscoveryDocumentAsync($"{Request.Scheme}://{Request.Host.Value}");

            var tokenClient = HttpClientFactory.CreateClient();

            var tokenResponse = await tokenClient.RequestPasswordTokenAsync(
                new PasswordTokenRequest
                {
                    ClientId = clientId,
                    ClientSecret = clientSecret,
                    GrantType = grantType,
                    Address = discoveryDocument.TokenEndpoint,
                    UserName = username,
                    Password = password,
                    Scope = scope,
                });

            if (!tokenResponse.IsError)
            {
                return Ok(new TokenResponseModel()
                {
                    access_token = tokenResponse.AccessToken,
                    refresh_token = tokenResponse.RefreshToken,
                    expires_in = tokenResponse.ExpiresIn,
                    scope = tokenResponse.Scope,
                    token_type = tokenResponse.TokenType,
                });
            }

            return BadRequest(tokenResponse.Error);
        }

Every time I request for a token I get unauthorised client.

My seeding data is as follows:

 public static IEnumerable<ApiResource> GetApis() =>
            new List<ApiResource>
            {
                new ApiResource("AppointmentBookingApi"),
                new ApiResource("PaymentApi", new string[] { "patient.portal.api.payment" }),
            };

        public static IEnumerable<IdentityResource> GetIdentityResources() =>
            new List<IdentityResource>
            {
                new IdentityResources.OpenId(),
                new IdentityResource
                {
                    Name = "patient.portal.api",
                    UserClaims =
                    {
                        "patient.portal",
                    },
                }
            };

        public static IEnumerable<Client> GetClients() =>
            new List<Client>
            {
                new Client
                {
                    ClientId = "patient.portal.client.refresh",
                    ClientSecrets = { new Secret("secret".Sha256()) },

                    AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,
                    RequirePkce = true,

                    RedirectUris = { "https://localhost:44307/signin-oidc" },
                    PostLogoutRedirectUris = { "https://localhost:44307/Home/Index" },

                    AllowedScopes =
                    {
                        "AppointmentBookingApi",
                        "PaymentApi",
                        IdentityServerConstants.StandardScopes.OpenId,
                        "patient.portal.api",
                    },

                    AllowOfflineAccess = true,
                    RequireConsent = false,
                },
                new Client
                {
                    ClientId = "patient.portal.client.code",
                    ClientSecrets = { new Secret("secret".Sha256()) },

                    AllowedGrantTypes = GrantTypes.ClientCredentials,
                    AllowedScopes =
                    {
                        "AppointmentBookingApi",
                    },
                },
            };

does anyone know where I'm I going wrong here????

来源:https://stackoverflow.com/questions/62015023/unauthorised-client-when-requesting-for-token-using-identityserver4-net-core-3

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!