我正在使用C#上的新MIP SDK构建POC应用程序。要求之一是使用存储在服务器上的用户名/密码。所有示例应用程序都使用OAuth2登录名并带有用于输入用户凭据的弹出窗口。 我相信正确实现IAuthDelegate可能会有所帮助,但是内联文档并没有太大帮助。 在我的引擎init方法中,我正在遵循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。
答案 0 :(得分:1)
好吧,显然没有使用用户名/密码登录的MIP SDK方法。但是,我可以使用其他Azure API破解自己的方式。 我向REST发送REST调用以获取访问和刷新令牌。 该请求是从IAuthDelegate的实现发送的。方法IAuthDelegate :: AcquireToken的实现将发送REST调用并返回访问令牌(字符串)。 登录请求结构如下:
...
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; }
}
希望这对将来的人有帮助。
答案 1 :(得分:0)
作为一般原则,MIP SDK并不关心您的登录-它只需要使用IAuthDelegate回调知道您的身份验证令牌。
您可以并且应该使用ADAL .Net以便使用用户名和密码登录。您可以使用.Net示例来查找该方法