我们正在使用uno平台开发公共客户端桌面应用程序,我们有一个要求调用我们的WEBAPI之一,它是由Azure AD保护的。
使用客户端凭据流在公共客户端应用程序中生成访问令牌,并且在标头中作为调用WEPAPI的承载令牌传递相同的凭证流。
用于在PublicClient应用程序中生成令牌的代码:
string authority = String.Format("https://login.microsoftonline.com/xxxxxxbf-86f1-xxxx-xxxx-2d7cd011db47");
string secret = "xxxxxxxx7eCXUMxxxF7GIxxxxxxxvSQkIcxxxxx";
Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext authContext = new Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext(authority);
Microsoft.IdentityModel.Clients.ActiveDirectory.ClientCredential clientCredential = new Microsoft.IdentityModel.Clients.ActiveDirectory.ClientCredential("xxxxxxx-7974-xxxx-xxxx-9dd621fxxxxx", secret);
Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationResult authResult = await authContext.AcquireTokenAsync("dd543eda-xxxx-xxxx-xxxx-58ddd58565db", clientCredential);
string token = authResult.AccessToken;能够获得令牌并成功地调用受保护的webapi。
但是,由于这将是公共客户端桌面应用程序,那么保护我的秘密的最佳方法是什么?我不能把它放在appsettings.json里,因为它会暴露出来。我也不能把钥匙库也放进去,因为我需要一些其他的文件才能进入钥匙库。
任何帮助都将不胜感激。谢谢
发布于 2022-10-10 13:14:40
如果您使用授权代码授权流而不是客户端凭据流,PublicClient应该在不使用client_secret的情况下工作。但是请记住,有了授权-代码授权流,用户交互的依赖性就出现了。授权-代码授权流只有当用户以交互方式登录到应用程序时才能工作。
随着客户端凭据流的工作,必须提供客户端秘密,因为它是客户端凭据流工作所必需的属性。
https://stackoverflow.com/questions/73486280
复制相似问题