2016-08-17 2 views
2

많은 사용자가있는 앱이 있습니다. 나는 그들의 이메일을 물어보고 싶다고 결심했다. 저는 Azure Mobile App Service를 Microsoft 인증과 함께 사용하고 있습니다. 따라서 wl.basicwl.emails을 추가했습니다. Microsoft 인증 ID

나는 그때 사용하여 이메일에 액세스 할 수 있습니다 읽기 :

var claimsPrincipal = User as ClaimsPrincipal; 
string email = claimsPrincipal.FindFirst(ClaimTypes.Email).Value; 

내가 그러나 내가 또 다른 문제로 실행하기 때문에 위의 시도도 없었어. 문제는 내가 로그인에 더 많은 범위를 추가 할 때 SID가 변화하고 있다는 점이다

var claimsPrincipal = User as ClaimsPrincipal; 
string sid = claimsPrincipal.FindFirst(ClaimTypes.NameIdentifier).Value; 

: 나는에서 NameIdentifier하여 사용자 데이터를 저장합니다. 따라서이 문제를 해결할 수있는 식별자를 추출 할 수있는 방법이 있습니까?

답변

1

이것은 알려진 문제입니다. 사용자를위한 안정적인 식별자를 얻는 방법에 대한 자세한 내용은이 위키 게시물을 참조하십시오. 여기

https://github.com/Azure/azure-mobile-apps-net-server/wiki/Understanding-User-Ids

문제를 소개하는 페이지에서 코드 조각입니다 :

앱 서비스 인증이 처음 출시되었을 때

의 SID가 사용자의 이메일을 기반으로 생성되었습니다. 이것은 구글, 페이 스북 및 트위터에 대해 동일한 이메일을 사용한다면 두 공급 업체의 사용자를 연결하는 데 큰 도움이되었지만, sid가 안정적이지 않다는 것을 의미했습니다. 누군가가 등록 된 Facebook 이메일을 변경할 수 있고 갑자기 sid가 다를 수 있습니다. 이것이 위키 페이지가 작성된 이유입니다. 안정적인 사용자 ID를 어떻게 생성 할 수 있는지 보여줍니다.

안정적인 식별자와 이러한 종류의 마이그레이션을 수행하기위한 옵션을 얻는 방법을 설명하는 페이지가 계속됩니다.

+0

좋아, 단지 'WEBSITE_AUTH_HIDE_DEPRECATED_SID'의 App Setting을'true '로 설정하여 버전을 4로 변경하십시오. 이전 sid가 여전히 사용 가능합니까? 그렇다면 문제없이 범위를 변경할 수 있습니다. 그러나 현재의 테스트는 나에게이 문제를주는 것처럼 보인다. 오래된'sid'를 얻기 위해 사용할 수있는 또 다른 ClaimType이 있습니까? – JTIM

+0

이전을 위해이 앱 설정을 지금 추가하지 않는 것이 좋습니다. 대신 "sid"클레임을 기존 ID로 취급 한 다음 stable_sid를 새 ID로 사용하기 시작할 수 있습니다. ID 시스템에 두 값을 모두 저장하면 시간이 지남에 따라 안정된 식별자로 마이그레이션 할 수 있습니다. –

+0

그래, 괜찮아. 그래서 느린 길 밖에 없다. 여분의 스코프를 삽입 할 수없고 어떤 식 으로든 이전 sid를 찾을 수 있습니까? – JTIM

관련 문제