Как получить только userInfo с библиотекой ADAL без предварительного получения кода - PullRequest
0 голосов
/ 28 февраля 2019

Итак, мне нужно получить userinfo, чтобы я мог получить объект uniqueID.Пример кода, который я нашел, всегда состоит из двух шагов: отправьте запрос на получение кода, а затем используйте код, appID и appSecret для получения токена вместе с объектом userInfo.Можно ли упростить этот процесс, чтобы быть одним шагом?Возможно, просто запросите id-токен, используя соединение openID, без необходимости сначала получать код?

 protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.Params["code"] != null)
        {
          var code = Request.Params["code"];
            AuthenticationContext ac = new AuthenticationContext(MicrosoftAuthBaseURL);

            ClientCredential clcred = new ClientCredential(MicrosoftAppId, MicrosoftAppSecret);

            AuthenticationResult acResult = ac.AcquireTokenByAuthorizationCodeAsync(code, new Uri(RedirectURI), clcred).Result;

            SignInUser(acResult.UserInfo.UniqueId);  var accesstoken = AcquireTokenWithResource(resource: "https://graph.microsoft.com/");

            Response.Write(accesstoken);
        }
    }


    protected void Button2_Click(object sender, EventArgs e)
    {
        GetAuthorizationCode();
    }

    public void GetAuthorizationCode()
    {
        JObject response = new JObject();

        var parameters = new Dictionary<string, string>
            {
                { "response_type", "code" },
                { "client_id", "clientid" },
                { "redirect_uri", "http://localhost:8099/WebForm1.aspx" },
                { "prompt", "none"},
                { "scope", "openid"}
            };

        var requestUrl = string.Format("{0}/authorize?{1}", EndPointUrl, BuildQueryString(parameters));

        Response.Redirect(requestUrl);

    }
    public string AcquireTokenWithResource(string resource)
    {
        var code = Request.Params["code"];
        AuthenticationContext ac =
    new AuthenticationContext(string.Format("https://login.microsoftonline.com/{0}", "tenantID"
                              ));
        ClientCredential clcred =
            new ClientCredential("clientID", "clientSecret");
        var token =
            ac.AcquireTokenByAuthorizationCodeAsync(code,
                       new Uri("http://localhost:8099/WebForm1.aspx"), clcred,resource).Result.AccessToken;

        return token;
    }
    private string BuildQueryString(IDictionary<string, string> parameters)
    {
        var list = new List<string>();

        foreach (var parameter in parameters)
        {
            list.Add(string.Format("{0}={1}", parameter.Key, HttpUtility.UrlEncode(parameter.Value)));
        }

        return string.Join("&", list);
    }

    protected string EndPointUrl
    {
        get
        {
            return string.Format("{0}/{1}/{2}", "https://login.microsoftonline.com", "tenantID", @"oauth2/");
        }
    }

1 Ответ

0 голосов
/ 28 февраля 2019

Вы можете использовать id_token для получения информации о пользователе.Для получения более подробной информации, пожалуйста, обратитесь к https://docs.microsoft.com/en-us/azure/active-directory/develop/id-tokens.

Кроме того, если вы хотите получить id_token, вы можете использовать API, как показано ниже

GET https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?
client_id=<you app id>        // Your registered Application ID
&response_type=id_tokene
&redirect_uri=<>       // Your registered redirect URI, URL encoded
&response_mode=fragment                              // 'form_post' or 'fragment'
&scope=openid profile email                                      // Include both 'openid' and scopes 
&state=12345                                          // Any value, provided by your app
&nonce=678910                                         // Any value, provided by your app

Для получения дополнительной информации, пожалуйста, обратитесь к документ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...