dotnetcore UserPasswordCredential 中的服务结构客户端身份验证不起作用

Posted

技术标签:

【中文标题】dotnetcore UserPasswordCredential 中的服务结构客户端身份验证不起作用【英文标题】:service fabric client authentication in dotnetcore UserPasswordCredential not working 【发布时间】:2018-07-17 21:39:43 【问题描述】:

我正在 aspnetcore (dotnetcore2.0) 应用程序中构建一个小型服务结构维护,但现在无法识别 UserPasswordCredential 类。来自here,正如他们所说,这是设计使然。有了它,我需要转换我以前的代码,以便我可以创建一个有效的 FabricClient。如何转换 GetAccessToken() 方法?

    private static FabricClient CreateSecuredFabricClient()
    
        try
        
            var claimsCredentials = new ClaimsCredentials();
            claimsCredentials.ServerThumbprints.Add(_sslThumbprint);

            var fc = new FabricClient(claimsCredentials, _clusterConnectionString);

            fc.ClaimsRetrieval += (o, e) =>
            
                var token = GetAccessToken(e.AzureActiveDirectoryMetadata);
                return token.Result.AccessToken;
            ;

            return fc;
        
        catch (FabricException fex)
        
            Console.WriteLine("Connect failed: 0", fex.InnerException.Message);
        
        catch (Exception e)
        
            Console.WriteLine("Connect failed: 0", e.Message);
        
        return null;
    

    private static Task<AuthenticationResult> GetAccessToken(System.Fabric.Security.AzureActiveDirectoryMetadata aad)
    
        var authContext = new AuthenticationContext(aad.Authority);

        var authResult = authContext.AcquireTokenAsync(
            aad.ClusterApplication,
            aad.ClientApplication,
            new UserPasswordCredential(_username, _password));
        return authResult;
    

【问题讨论】:

【参考方案1】:

Here's 一个示例,说明如何使用 ADAL 使用 clientid 和 clientsecret 向 AAD 进行身份验证。

(这也适用于 aspnetcore 2.0)

基本代码:

var authContext = new AuthenticationContext(authority);
clientCredential = new ClientCredential(clientId, appKey);
result = await authContext.AcquireTokenAsync(resourceId, clientCredential);

【讨论】:

嗨@LoekD,在服务结构中有两个信息需要ClusterApplicationID 和ClientApplicationID。我可以从您的代码中获取令牌,但令牌在 FabricClient 中无效。

以上是关于dotnetcore UserPasswordCredential 中的服务结构客户端身份验证不起作用的主要内容,如果未能解决你的问题,请参考以下文章

从 DotNetCore 迁移到 NodeJS

DotNetCore.NPOI 总是创建损坏的文件

DotNetCore 3.0 助力 WPF 开发

DotNetCore:GetInvalidFileNameChars 的跨平台版本?

通过Jexus 部署 dotnetcore

Linux 上的单实例 dotnetcore cli 应用程序