服务客户可以使用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
错误