Вопрос

Я разрабатываю приложение пользовательского агента SIP, которое подключается к серверу звездочек и пытается сделать исходящий звонок. Я использую реализацию NIST Jain SIP API.

Когда приложение регистрируется сама, 401 (несанкционированный) ответ ставит за собой его с заголовком www-authenticate. Заявление вставляет заголовок авторизации в следующий запрос регистрации. На этот раз Asterisk возвращает ответ 200 (OK) - регистрация успешна.

Когда приложение передает запрос приглашения, Asterisk отвечает с помощью ответа 407 (требуется аутентификация прокси). На этот раз ответ содержит заголовок прокси-аутентикации. Мое заявление снова отправляет приглашение, но на этот раз с заголовком авторизации, на который Asterisk отвечает тем же ответом 407 (требуется аутентификация по доверенности).

Вот сообщения SIP, которые передаются ('>>', указывает исходящие сообщения; '<<' Указывает входящие сообщения):

>>

REGISTER sip:10.0.84.30:5060 SIP/2.0
Call-ID: acf3c0e9c1338d2c28d9c534ae86cbd8@10.0.85.3
CSeq: 1 REGISTER
From: <sip:301@asterisk>;tag=2B3n8g
To: <sip:301@asterisk>
Via: SIP/2.0/UDP 10.0.85.3:5060;branch=z9hG4bKc7dd178d3d444ccc059a191e700fc8b73230
Max-Forwards: 70
Contact: <sip:10.0.85.3:5060>
Expires: 300
Content-Length: 0

<<

SIP/2.0 100 Trying
Via: SIP/2.0/UDP 10.0.85.3:5060;branch=z9hG4bKc7dd178d3d444ccc059a191e700fc8b73230;received=10.0.85.3
From: <sip:301@asterisk>;tag=2B3n8g
To: <sip:301@asterisk>
Call-ID: acf3c0e9c1338d2c28d9c534ae86cbd8@10.0.85.3
CSeq: 1 REGISTER
User-Agent: Asterisk PBX (switchvox)
Allow: INVITE,ACK,CANCEL,OPTIONS,BYE,REFER,SUBSCRIBE,NOTIFY
Contact: <sip:301@10.0.84.30>
Content-Length: 0

<<

SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP 10.0.85.3:5060;branch=z9hG4bKc7dd178d3d444ccc059a191e700fc8b73230;received=10.0.85.3
From: <sip:301@asterisk>;tag=2B3n8g
To: <sip:301@asterisk>;tag=as3c458716
Call-ID: acf3c0e9c1338d2c28d9c534ae86cbd8@10.0.85.3
CSeq: 1 REGISTER
User-Agent: Asterisk PBX (switchvox)
Allow: INVITE,ACK,CANCEL,OPTIONS,BYE,REFER,SUBSCRIBE,NOTIFY
Contact: <sip:301@10.0.84.30>
WWW-Authenticate: Digest realm="asterisk",nonce="6fbe5a68"
Content-Length: 0

>>

REGISTER sip:10.0.84.30:5060 SIP/2.0
CSeq: 2 REGISTER
From: <sip:301@asterisk>;tag=2B3n8g
To: <sip:301@asterisk>
Via: SIP/2.0/UDP 10.0.85.3:5060;branch=z9hG4bKffb0be254f93f61fa0dc7ac32b9078a43230
Max-Forwards: 70
Contact: <sip:10.0.85.3:5060>
Expires: 300
Authorization: Digest username="301",realm="asterisk",nonce="6fbe5a68",response="bc7075e8e241a4109dfa24d6ae95e78c",algorithm=MD5,uri="sip:10.0.84.30:5060",nc=00000001
Call-ID: acf3c0e9c1338d2c28d9c534ae86cbd8@10.0.85.3
Content-Length: 0

<<

SIP/2.0 100 Trying
Via: SIP/2.0/UDP 10.0.85.3:5060;branch=z9hG4bKffb0be254f93f61fa0dc7ac32b9078a43230;received=10.0.85.3
From: <sip:301@asterisk>;tag=2B3n8g
To: <sip:301@asterisk>
Call-ID: acf3c0e9c1338d2c28d9c534ae86cbd8@10.0.85.3
CSeq: 2 REGISTER
User-Agent: Asterisk PBX (switchvox)
Allow: INVITE,ACK,CANCEL,OPTIONS,BYE,REFER,SUBSCRIBE,NOTIFY
Contact: <sip:301@10.0.84.30>
Content-Length: 0

<<

SIP/2.0 200 OK
Via: SIP/2.0/UDP 10.0.85.3:5060;branch=z9hG4bKffb0be254f93f61fa0dc7ac32b9078a43230;received=10.0.85.3
From: <sip:301@asterisk>;tag=2B3n8g
To: <sip:301@asterisk>;tag=as3c458716
Call-ID: acf3c0e9c1338d2c28d9c534ae86cbd8@10.0.85.3
CSeq: 2 REGISTER
User-Agent: Asterisk PBX (switchvox)
Allow: INVITE,ACK,CANCEL,OPTIONS,BYE,REFER,SUBSCRIBE,NOTIFY
Expires: 300
Contact: <sip:10.0.85.3:5060>;expires=300
Date: Tue, 03 May 2011 06:42:33 GMT
Content-Length: 0

>>

INVITE sip:302@asterisk SIP/2.0
Call-ID: c20df277bb6f9fb69d83000e5255eb86@10.0.85.3  
CSeq: 3 INVITE
From: <sip:301@asterisk>;tag=KOZWxg
To: <sip:302@asterisk>
Via: SIP/2.0/UDP 10.0.85.3:5060;branch=z9hG4bKaa0520efde83907b71d1f76315188c413230
Max-Forwards: 70
Contact: <sip:10.0.85.3:5060>
Route: <sip:10.0.84.30:5060;lr>
Content-Type: application/sdp
Content-Length: 106

>>

v=0
o=- 3513393083 3513393083 IN IP4 10.0.85.3
s=-
c=IN IP4 10.0.85.3
t=0 0
m=audio 40000 RTP/AVP 3

<<

SIP/2.0 407 Proxy Authentication Required
Via: SIP/2.0/UDP 10.0.85.3:5060;branch=z9hG4bKaa0520efde83907b71d1f76315188c413230;received=10.0.85.3
From: <sip:301@asterisk>;tag=KOZWxg
To: <sip:302@asterisk>;tag=as5de9ed83
Call-ID: c20df277bb6f9fb69d83000e5255eb86@10.0.85.3
CSeq: 3 INVITE
User-Agent: Asterisk PBX (switchvox)
Allow: INVITE,ACK,CANCEL,OPTIONS,BYE,REFER,SUBSCRIBE,NOTIFY
Contact: <sip:302@10.0.84.30>
Proxy-Authenticate: Digest realm="asterisk",nonce="74986b64"
Content-Length: 0

>>

INVITE sip:302@asterisk SIP/2.0
CSeq: 4 INVITE
From: <sip:301@asterisk>;tag=2B3n8g
To: <sip:302@asterisk>
Via: SIP/2.0/UDP 10.0.85.3:5060;branch=z9hG4bK86f9dbdff9eeca422fbb67321dd45f7a3230
Max-Forwards: 70
Contact: <sip:10.0.85.3:5060>
Route: <sip:10.0.84.30:5060;lr>
Content-Type: application/sdp
Authorization: Digest   username="301",realm="asterisk",nonce="74986b64",response="a08b8d7ce96cae00e7d334e132bf7358",algorithm=MD5,uri="sip:302@asterisk",nc=00000001
Call-ID: acf3c0e9c1338d2c28d9c534ae86cbd8@10.0.85.3
Content-Length: 106

>>

v=0
o=- 3513393083 3513393083 IN IP4 10.0.85.3
s=-
c=IN IP4 10.0.85.3
t=0 0
m=audio 40000 RTP/AVP 3

<<

SIP/2.0 407 Proxy Authentication Required
Via: SIP/2.0/UDP 10.0.85.3:5060;branch=z9hG4bK86f9dbdff9eeca422fbb67321dd45f7a3230;received=10.0.85.3
From: <sip:301@asterisk>;tag=2B3n8g
To: <sip:302@asterisk>;tag=as3c458716
Call-ID: acf3c0e9c1338d2c28d9c534ae86cbd8@10.0.85.3
CSeq: 4 INVITE
User-Agent: Asterisk PBX (switchvox)
Allow: INVITE,ACK,CANCEL,OPTIONS,BYE,REFER,SUBSCRIBE,NOTIFY
Contact: <sip:10.0.85.3:5060>
Proxy-Authenticate: Digest realm="asterisk",nonce="1bd30f50"
Content-Length: 0

Заголовок авторизации построен одинаково одинаково в обоих случаях (тот же код, который выполняется). Я использую запрос «Запрос» для "Digesturi". Я пытался использовать заголовок по прокси-авторизации вместо заголовка авторизации, но результат одинаково.

Кто -нибудь может увидеть, что я делаю не так? Заранее спасибо.

Это было полезно?

Решение

Для аутентификации к прокси (Другими словами, у вас есть 407 Proxy Authentication Required ты нуждаешься в Proxy-Authorization заголовок.

В качестве RFC 2617 говорит, вы строите это так же, как и Authorization заголовок.

Вы упоминаете об использовании URI в своем вопросе. RFC 2617 Раздел 3.2.2 говорит, что вы используете запрос-ури (sip:302@asterisk) Остерегайтесь специфичных для SIP изменений в RFC 3261 Раздел 22.4.

Другие советы

Я решил проблему. Похоже, что Asterisk не может связать мой второй запрос приглашения с предыдущим 407 (требуемая аутентификация по доверенности), содержащий значение нере-значения для заголовка по доверенности.

Это было потому, что я не использовал одинаковые значения для ID Call и тега из заголовка для двух запросов приглашения. Для второго запроса приглашения, который содержит заголовок прокси-автоентификации, я случайно использовал значения Tag-ID Call и из заголовка первого запроса регистра, вместо первого запроса приглашения.

Приглашение еще не преуспевает, хотя. Для второго ответа я теперь получаю 488 (не приемлемо), но я постараюсь выяснить, что сейчас не так в другом вопросе.

Странно, что ваш сервер Asterisk отвечает 407, который я только что проверил мой, и он отвечает 401. Asterisk, в конце концов, B2Bua, а не прокси. Я бы порекомендовал попробовать заголовок авторизации в аутентифицированном запросе, а не прокси-авторизация, так как это работает с моим сервером звездочки.

Кроме того, вам нужно использовать URI запроса в дайджесте, а не от Header URI. Так что в вашем случае это должен быть URI = SIP: 302@Asterisk.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top