gpt4 book ai didi

c# - 微软信息保护 SDK : using username/password to login

转载 作者:行者123 更新时间:2023-11-30 12:38:11 28 4
gpt4 key购买 nike

我正在 C# 上使用新的 MIP SDK 构建 POC 应用程序。其中一项要求是使用存储在服务器上的用户名/密码。所有示例应用程序都使用 OAuth2 登录和用户凭据输入的弹出窗口。我相信正确实现 IAuthDelegate 可能会有所帮助,但在线文档并没有多大帮助。在我的引擎初始化方法中,我遵循 SDK 示例

            var authDelegate = new AuthDelegateImplementation(appInfo);

//Initialize and instantiate the File Profile
//Create the FileProfileSettings object
var profileSettings = new FileProfileSettings(
path: "mip_data",
useInMemoryStorage: true,
authDelegate: authDelegate,
consentDelegate: new ConsentDelegateImplementation(),
applicationInfo: appInfo,
minimumLogLevel: LogLevel.Trace);

Console.WriteLine("Load the Profile async and wait for the result");
var fileProfile = Task.Run(async () => await MIP.LoadFileProfileAsync(profileSettings)).Result;

和具有以下代码的 AuthDelegateImplementation

public string AcquireToken(Identity identity, string authority, string resource)
{
AuthenticationContext authContext = new AuthenticationContext(authority);
AuthenticationResult result = authContext.AcquireTokenAsync(
resource: resource,
clientId: _appInfo.ApplicationId,
redirectUri: new Uri(redirectUri),
parameters: new PlatformParameters(PromptBehavior.Auto, null),
userId: UserIdentifier.AnyUser).Result;
return result.AccessToken;
}

感谢您的帮助,C.

最佳答案

嗯,显然没有使用用户/密码登录的 MIP SDK 方式。但是,我能够通过使用其他 Azure API 进行破解。我向 Azure REST 发送 REST 调用以获取访问和刷新 token 。该请求是从 IAuthDelegate 的实现发送的。您对方法 IAuthDelegate::AcquireToken 的实现将发送 REST 调用并返回访问 token (字符串)。登录请求结构如下:

...
client.BaseAddress = new Uri(String.Format("https://login.microsoftonline.com/{0}/oauth2/token", tenantId));
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));
...
string postBody = string.Format(
"grant_type=password&" +
"resource=https://psor.o365syncservice.com&" +
"username={0}&" +
"password={1}&" +
"client_id={2}", credentialsIdentity.Username, credentialsIdentity.Password, _appInfo.ApplicationId);

响应结构是这样的:

   public class LoginResponse
{
public string token_type { get; set; }
public string scope { get; set; }
public string expires_in { get; set; }
public string ext_expires_in { get; set; }
public string expires_on { get; set; }
public string not_before { get; set; }
public string resource { get; set; }
public string access_token { get; set; }
public string refresh_token { get; set; }
}

希望这对以后的人有所帮助。

关于c# - 微软信息保护 SDK : using username/password to login,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54855754/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com