Azure ๋กœ๊ทธ์ธ.

์•ˆ๋…•ํ•˜์„ธ์š”.

Azure ์ธ์ฆ๋œ ์‚ฌ๋žŒ์ด๋ฉด ์ €ํฌ ํšŒ์› DB ์ •๋ณด๋ฅผ ์กฐํšŒํ•ด์„œ ์„ธ์…˜์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
๊ทผ๋ฐ ๊ฐ„ํ—์ ์œผ๋กœ ์•„๋ž˜์™€ ๊ฐ™์ด, ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์ด ์Œ“์—ฌ์„œ 400 (Bad Request - Request Too Long) ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
์ •ํ™•ํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋ชฐ๋ผ ์ด๋ ‡๊ฒŒ ๋ฌธ์˜ ๋“œ๋ ค๋ด…๋‹ˆ๋‹ค.ใ… ใ… 

์ฐธ๊ณ ๋กœ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋กœ๊ทธ์ธํ• ๋•Œ์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๊ฐ€
์„ธ์…˜์ด ์—†์–ด์ ธ์„œ ๋‹ค์‹œ ๋กœ๊ทธ์ธํ• ๋•Œ๊ฐ€ ๋ฌธ์ œ์ง€ ์•Š์„๊นŒ ์‹ถ์Šต๋‹ˆ๋‹ค.

ํ™”๋ฉด ์บก์ฒ˜ 2022-10-31 120704

2๊ฐœ์˜ ์ข‹์•„์š”

๋ญ”๊ฐ€ ์›น ์š”์ฒญํ• ๋•Œ๋งˆ๋‹ค ์„ธ์…˜ ๊ด€๋ จ ์ •๋ณด๋“ค์ด ์ถ”๊ฐ€ ์ ์žฌ๋˜๋Š” ๋Š๋‚Œ์ด๋„ค์š”.
์„ธ์…˜ ์ƒ์„ฑ ์ดํ›„์— ์›น ์Šคํ† ๋ฆฌ์ง€ ๋ณ€ํ™”๋ฅผ ํ™•์ธํ•ด๋ณด์‹œ๊ฒ ์–ด์š”?

2๊ฐœ์˜ ์ข‹์•„์š”

์ •์ƒ์ ์œผ๋กœ ์„ธ์…˜์ด ์ƒ๊ธธ๋•Œ ์›น ์Šคํ† ๋ฆฌ์ง€๋ฅผ ๋ด๋ณด๋ฉด ๋ ๊นŒ์š”?
์ € ์ƒํ™ฉ์ด ์ง€๊ธˆ, ๊ฐ„ํ—์ ์œผ๋กœ ์„ธ์…˜์ด ๋Š๊ฒผ์„๋•Œ ๋‹ค์‹œ AD ์ธ์ฆ(Azure) ์ดํ›„์— ๋ฐœ์ƒํ•˜๋Š”๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค.

2๊ฐœ์˜ ์ข‹์•„์š”

๋™์ผํ•œ ์ด์Šˆ์— ๋Œ€ํ•œ ์งˆ๋ฌธ์ด stackoverflow์— ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„ ๊ณต์œ  ๋“œ๋ ค์š”.

๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•˜๋ฉด,

  1. azure ad oauth2 ์ฟ ํ‚ค๊ฐ€ ๋งŒ๋ฃŒ๋ฉ๋‹ˆ๋‹ค.
  2. login.microsoft.com์œผ๋กœ ๊ฐ”๋‹ค์˜ค๋ฉด์„œ ๋งŒ๋ฃŒ๋œ ์ฟ ํ‚ค๊ฐ€ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ nonce ์ฟ ํ‚ค๊ฐ€ ์ƒˆ๋กœ ์ถ”๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
  3. ajax๋Š” cross domain ์ •์ฑ…์œผ๋กœ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ(microsoft.com)๋ฅผ ์ œ๋Œ€๋กœ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜์ง€๋งŒ, nonce ์ฟ ํ‚ค๋Š” ์ด๋ฏธ ํŽ˜์ด์ง€์— ์ถ”๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
  4. ๋™์ผ ํ˜„์ƒ์ด ๋ฐ˜๋ณต ๋˜๊ณ , nonce ์ฟ ํ‚ค๋Š” ๋น ๋ฅด๊ฒŒ ์ฆ๊ฐ€ ํ•ฉ๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ์ฑ…
OWIN OpenId ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ฒ˜๋ฆฌ๋ฅผ ํ™•์žฅํ•ด์„œ ajax ์ฒ˜๋ฆฌ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์ ์šฉํ•˜์—ฌ redirect์™€ ํ•จ๊ป˜ ์‹ ๊ทœ ์ฟ ํ‚ค๋ฅผ ๋ณด๋‚ด๋Š” ์ผ์„ ๋ง‰์Šต๋‹ˆ๋‹ค.

public void ConfigureAuth(IAppBuilder app)
{
    app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
    app.UseCookieAuthentication(new CookieAuthenticationOptions());

    app.UseOpenIdConnectAuthentication(
        new OpenIdConnectAuthenticationOptions
        {
            ClientId = clientId,
            Authority = authority,
            Notifications = new OpenIdConnectAuthenticationNotifications
            {
                RedirectToIdentityProvider = ctx => 
                {
                    bool isAjaxRequest = (ctx.Request.Headers != null && ctx.Request.Headers["X-Requested-With"] == "XMLHttpRequest");

                    if (isAjaxRequest)
                    {
                        ctx.Response.Headers.Remove("Set-Cookie");
                        ctx.State = NotificationResultState.HandledResponse;
                    }

                    return Task.FromResult(0);
                }
            }
        });
}

์˜๊ฒฌ
stackoverflow์˜ ๊ธ€์„ ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ์ ์–ด๋ดค์Šต๋‹ˆ๋‹ค. ์˜ค์—ญ์ด ์žˆ๋”๋ผ๋„ ์–‘ํ•ด ๋ถ€ํƒ ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
๋‚ด์šฉ๋งŒ ๋ด์„œ๋Š” ์„ธ์…˜ ๋งŒ๋ฃŒ ๋์„ ๋•Œ ์„ธ์…˜ ์ฟ ํ‚ค๊ฐ€ ๊ฐฑ์‹  ๋˜๋Š”๋ฐ, ํฌ๋กœ์Šค ๋„๋ฉ”์ธ ์ •์ฑ…์œผ๋กœ ์ •์ƒ์ ์ธ ํ›„์† ์ฒ˜๋ฆฌ๊ฐ€ ์ด๋ค„์ง€์ง€ ์•Š์•Š์•„ ์Šคํ† ๋ฆฌ์ง€์— ์ฟ ํ‚ค๊ฐ€ ๋ˆ„์  ์ ์žฌ ๋˜๋Š” ์ด์Šˆ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.
์ด๋ฅผ ํšŒํ”ผํ•˜๊ธฐ ์œ„ํ•ด์„œ ์„ธ์…˜ ๋งŒ๋ฃŒ๋กœ ์ฟ ํ‚ค ๊ฐฑ์‹ ํ•  ๋•Œ ์ฟ ํ‚ค๋ฅผ ๊ฐฑ์‹ ํ•˜์ง€ ์•Š๊ณ  401์„ ๋ฐœ์ƒ์‹œ์ผœ์„œ ajax๊ฐ€ ํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ๊ฐฑ์‹ ์‹œํ‚ค๋Š” ๋ฐฉ์‹์œผ๋กœ ์ •์ƒ ์ฒ˜๋ฆฌ ๋˜๋„๋ก ์œ ๋„ํ•˜๋Š” ์ฝ”๋“œ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.
์ด ์ฝ”๋“œ๋กœ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์•„๋งˆ๋„ ์›์ธ์€ stackoverflow์˜ ๊ฒƒ๊ณผ ๋™์ผํ•ด๋ณด์—ฌ์„œ ๋‹ค๋ฅธ ํ•ด๊ฒฐ์ฑ…๋“ค์„ ์ฐพ์•„ ์ฐจ๊ทผ์ฐจ๊ทผ ๋Œ€์‘ํ•ด๋ด์•ผ ๋˜๊ฒ ๋„ค์š”.

์ฐธ๊ณ 

3๊ฐœ์˜ ์ข‹์•„์š”

์ •๋ง ๊ณ ๋ง™์Šต๋‹ˆ๋‹ค.
ํ…Œ์ŠคํŠธ ํ•ด๋ณด๊ณ  ์ •๋ณด ๊ณต์œ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

3๊ฐœ์˜ ์ข‹์•„์š”

ํ•˜๋‚˜๋งŒ ๋” ์งˆ๋ฌธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์‚ฌ์‹ค ์ €ํฌ ์‚ฌ์ดํŠธ๊ฐ€, ajax๋ฅผ ์ด์šฉํ•œ ๋น„๋™๊ธฐ ํ†ต์‹ ์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๋‹น ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ๋„, ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉ์•ˆํ•˜๋‹ค๊ฐ€ ํŽ˜์ด์ง€ ๋ฆฌ๋กœ๋“œ๊ฐ€ ๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ
๋ฒ„ํŠผ์ด๋‚˜ ๋‹ค๋ฅธ ์•ก์…˜ ์‹œ ajax๋ฅผ ์ด์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ ํ†ต์‹ ์ด ๋ฐœ์ƒํ• ๋•Œ
์ •ํ™•ํžˆ๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ด ๋•Œ, login.microsoft.com ์— ๊ฐ”๋”ฐ์˜ค๋Š”๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ์ €๋Š” ajax๋ฅผ ์ด์šฉํ•œ ๋น„๋™๊ธฐ ํ†ต์‹  ์ด์ „์—,
์ฟ ํ‚ค/์„ธ์…˜ ๊ฐ’์ด ์žˆ๋Š”์ง€ ์—†๋Š”์ง€ ํŒ๋‹จํ•ด์„œ ์—†์œผ๋ฉด, 401 ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒํ•˜์—ฌ ํŽ˜์ด์ง€๋ฅผ ๋ฆฌ๋กœ๋“œ ์‹œ์ผœ์•ผ ํ•˜๋Š”๊ฑด๊ฐ€์š”?

2๊ฐœ์˜ ์ข‹์•„์š”

์ฟ ํ‚ค๊ฐ€ ์—†๋Š” ์ƒํƒœ๋ฅผ ์ฒดํฌ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋งŒ๋ฃŒ๋œ ์ฟ ํ‚ค๋ฅผ ์ด์šฉํ•˜์—ฌ API๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ํ”„๋ ˆ์ž„์›Œํฌ ์ˆ˜์ค€์—์„œ ์ƒˆ๋กœ์šด ์ฟ ํ‚ค๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋…ธ๋ ฅ์„ ์ค‘๊ฐ„์— ๋‚š์•„์ฑ„์„œ 401 ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ ๋‹ค์Œ ajax ๋‹จ์—์„œ 401๋ฅผ ๋ฐ›์œผ๋ฉด ํ™”๋ฉด์„ ์ „์ฒด ๊ฐฑ์‹ ํ•˜๊ณ  ์‹ ๊ทœ ์ฟ ํ‚ค๋ฅผ ๊ฐ€์ ธ์™€ ํฌ๋กœ์Šค ๋„๋ฉ”์ธ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
์ฟ ํ‚ค ์ƒํƒœ๋ฅผ ์ฒดํฌ ํ•˜๋Š” ์‚ฌ์ „ ์ฒ˜๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ผ ์ƒˆ๋กœ์šด ์ฟ ํ‚ค๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ์˜ ์‚ฌํ›„ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ํ•ด๊ฒฐ์ฑ…์œผ๋กœ ๋ณด์‹œ๋ฉด ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค.

3๊ฐœ์˜ ์ข‹์•„์š”

์ž˜ ์ดํ•ด๋Š” ์•ˆ๋˜์ง€๋งŒ, ์ด์ œ๋Š” ์ œ๊ฐ€ ํ•ด๊ฒฐํ•ด์•ผํ•˜๋Š” ๋ฌธ์ œ์ธ๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ •์„ฑ์Šค๋Ÿฌ์šด ๋Œ“๊ธ€ ๋„ˆ๋ฌด๋„ˆ๋ฌด ๊ณ ๋ง™์Šต๋‹ˆ๋‹ค.

3๊ฐœ์˜ ์ข‹์•„์š”