使用Xamarin中Azure Active Directory中的用户名进行无提示登录

时间:2017-02-04 07:29:04

标签: xamarin xamarin.ios xamarin.android azure-active-directory

我正在使用Xamarin Forms开发应用程序。我在azure portal上创建了一个目录。正如我在互联网上看到的引用,活动目录身份验证使用微软登录页面登录。

我想创建本机登录表单并将用户名传递给活动目录并对其进行身份验证。

是否可以以编程方式传递用户凭据并对用户进行身份验证? 我如何传递用户凭证?

我试过以下但是我得到了“(411)长度要求”例外

            var request = WebRequest.Create(string.Format(@"https://login.microsoftonline.com/{0}/oauth2/token?client_id=5e811f4f-4fa4-451e-a439-ca05cabc02d7&grant_type=password&username=02atul.com@gmail.com&password=userpassword&scope=openid", tenant));
            request.ContentType = "application/x-www-form-urlencoded";
            request.Method = "POST";
            using (HttpWebResponse response = await request.GetResponseAsync() as HttpWebResponse)
            {
                if (response.StatusCode != HttpStatusCode.OK)
                    Debug.WriteLine("Error fetching data. Server returned status code: {0}", response.StatusCode);
                using (StreamReader reader = new StreamReader(response.GetResponseStream()))
                {
                    var content = reader.ReadToEnd();
                    if (string.IsNullOrWhiteSpace(content))
                    {
                        Debug.WriteLine("Response contained empty body...");
                    }
                    else {
                        Debug.WriteLine("Response Body: \r\n {0}", content);
                    }
                }
            }

我的用户名是我的电子邮件ID。用户名是否正确?因为我现在得到错误的请求错误。少了什么东西?

AAD User Name

1 个答案:

答案 0 :(得分:3)

从技术上讲,您可以使用更详细描述here with ADAL

的用户名和密码流

但是,您需要重新访问您的方案并了解它是否真正实现了Azure Active Directory平台的用途。

用户使用基于OAuth2的身份验证,只需与MS,FB,Google等受信任的身份提供商共享密码,即可获得安全性和安全性......一般情况下,安全意识的用户不希望输入密码密码进入您的随机网站,并相信您不会滥用该信息。如果您想使用AAD,您还应该使用我们的登录体验,因为这确实是客户在许多方面为我们的服务付出的代价。

编辑:如果ADAL不再支持此流程,您可以自己生成http请求:

POST: https://login.microsoftonline.com/xxxxx.onmicrosoft.com/oauth2/token

Content-Type: application/x-www-form-urlencoded
resource={resource}&client_id={clientId}&grant_type=password&username={userName}&password={password}&scope=openid&client_secret={clientSecret}