在运行时连接到IdentityServer外部提供程序

时间:2019-05-28 08:34:10

标签: identityserver4

服务客户可以使用external provider吗? 我可以构建external_authentication示例,并将其与Azure AD一起使用。但是,只有当人们使用Web浏览器并按下登录页面上的OpenID按钮时,它才起作用。

我很有趣,是否有可能编写一个服务,该服务将在运行时登录到Azure AD,并通过AzureAD外部提供程序连接到IdentityServer保护的REST服务。 我试图修改ResourceOwnerClient sample源代码,并写了类似的内容

static async Task<TokenResponse> GetToken(string tenat, string clientid, string secret, string user, string password)
{
    var durl = $"https://login.microsoftonline.com/{tenat}/.well-known/openid-configuration";
    using (var client = new HttpClient())
    using (var dclient = new DiscoveryClient(durl))
    {
        dclient.Policy.ValidateIssuerName = false;
        dclient.Policy.ValidateEndpoints = false;

        var disco = await dclient.GetAsync();
        if (disco.IsError)
        {
            Console.WriteLine(disco.Error);
            return null;
        }

        // request token
        var tokenResponse = await client.RequestPasswordTokenAsync(new PasswordTokenRequest
        {
            Address = disco.TokenEndpoint,
            ClientId = clientid,
            ClientSecret = secret,


            UserName = user,
            Password = password,
        });

        return tokenResponse;
    }
}

其中clientid和secreat是用于在Azure AD中注册的应用程序的,而用户名和密码是Azure AD用户凭据。 但失败并出现invalid request错误

0 个答案:

没有答案